Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 빅스비
- 빅스비 스튜디오
- 세그먼트트리
- Network Flow
- 이분탐색
- SWTest
- 네트워크 플로우
- 코딩테스트
- 삼성
- Baekjoon
- 최대유량
- 최대 유량
- SWEA
- INNER JOIN
- 후기
- bixby studio
- JOIN
- ICPC
- SDS 알고특강
- 완전탐색
- BOJ
- 백준
- 분할정복
- SQL
- 메모이제이션
- maximum flow
- 프로그래머스
- DP
- backjoon
- 알고리즘
Archives
- Today
- Total
답은 알고리즘 뿐이야!
[BOJ 9465] 스티커 본문
문제 출저 : https://www.acmicpc.net/problem/9465
풀이 :
DP문제입니다.
스티커를 떼면 변을 공유하는 모든 스티커는 사용 할 수 없으니 대각선 스티커만 보면 됩니다.
아래의 그림에서 60점 스티커를 뗀다고 가정했을때,
그 전에 점수를 쌓을 수 있는 경우는 20점과 100점을 뗐을 때 뿐입니다.
그럼 20점을 뗀다면 어떨까요?
그 전에 점수를 쌓을 수 있는 경우는 70점과 50점을 뗐을 때 뿐이겠죠.
따라서 쌓는 과정에서 값의 틀어짐이 없이 잘 쌓일 거라는 사실을 알 수 있습니다.
문제의 목표는 스티커 점수의 최댓값을 찾는 것이므로 두가지 경우 중 값이 더 큰 경우를 채택하면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include<stdio.h>
int t,n, arr[2][100000];
int main()
{
scanf("%d", &t);
for (int test = 0; test < t; test++)
{
scanf("%d", &n);
for (int inp = 0; inp < 2; inp++)for (int inp1 = 0; inp1 < n; inp1++)scanf("%d", &arr[inp][inp1]);
arr[0][1] += arr[1][0];
arr[1][1] += arr[0][0];
for (int i = 2; i < n; i++)
{
arr[0][i] += arr[1][i - 1] > arr[1][i - 2] ? arr[1][i - 1] : arr[1][i - 2];
arr[1][i] += arr[0][i - 1] > arr[0][i - 2] ? arr[0][i - 1] : arr[0][i - 2];
}
printf("%d\n",(arr[0][n - 1] > arr[1][n - 1] ? arr[0][n - 1] : arr[1][n - 1]));
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'알고리즘 > 백준문제풀이' 카테고리의 다른 글
[BOJ 2805] 나무 자르기 (0) | 2019.07.22 |
---|---|
[BOJ 2512] 예산 (0) | 2019.07.22 |
[BOJ 1002] 터렛 (0) | 2019.07.22 |
[BOJ 1004] 어린왕자 (0) | 2019.07.18 |
[BOJ 14891] 톱니바퀴 (0) | 2019.07.17 |
Comments