:: ADVANCE ::
[BaekJoon][2228] 구간 나누기 본문
반응형
BAEKJOON ONLINE JUDGE
https://www.acmicpc.net/problem/2228
DP
구간을 나눌 때 예를 들어 예제를 살펴보면 6개의 원소 중 2개의 구간을 만들어야 한다.
이때 위의 조건을 만족하면서 합이 최대가 되는 경우는 { -1, 3, 1, 2, 4, -1 } 인 경우이다.
이 문제를 DP로 풀 때
DP[n][m] = n개의 원소들의 집합에서 m개의 구간으로 나누었을 때 합의 최대값
1. i번 째 수를 포함하지 않는 경우
이는 i - 1까지의 원소들의 집합에서 구간 m개를 나눈 합의 최대값과 같다.
-> dp[i][m] =dp[i - 1][m]
2. i번 째 수를 포함하는 경우
i번 째 수를 포함하는 구간이 m번째 구간이 되어야 하며
이전에 m - 1구간을 만들었을 때의 최대값과 합하여야 한다.
이 때, i번째 수를 포함하는 구간의 시작지점이 어디인지를 모른다.
따라서 반복문을 통해 모든 경우를 찾아보고 그 중 최대값을 찾아 합하여 준다.
즉, Max(dp[k - 2][m - 1] + Sum(data[k ~ i])
반응형
'Algorithm > DP (동적계획법)' 카테고리의 다른 글
[BaekJoon][11726] 2xn 타일링 (0) | 2016.07.11 |
---|---|
[BaekJoon][11048] 이동하기 (0) | 2016.07.11 |
[BaekJoon][1937] 욕심쟁이 판다 (0) | 2016.07.11 |
[BaekJoon][1520] 내리막 길 (0) | 2016.07.11 |
[BaekJoon][1463] 1로 만들기 (0) | 2016.07.11 |
Comments