문제 8 · 실습 — Kadane 알고리즘
배열 {1, -2, 3, 5, -4, 2, 5}에 대해 Kadane 알고리즘으로 dp를 채우고 최대 부분합maximum subarray을 구합니다.
cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> a = {1, -2, 3, 5, -4, 2, 5};
int n = a.size();
vector<int> dp(n);
dp[0] = a[0];
for (int i = 1; i < n; ++i)
dp[i] = max(a[i], dp[i-1] + a[i]); // 여기서 끝나는 최대 부분합
cout << "dp: ";
for (int x : dp) cout << x << ' ';
cout << '\n';
int best = *max_element(dp.begin(), dp.end());
cout << "최대 부분합: " << best << '\n';
return 0;
}출력:
dp: 1 -1 3 8 4 6 11
최대 부분합: 11dp 열이 문제의 "최대 부분합"과 정확히 일치하며, 그 최댓값 11이 정답입니다(부분 배열 {3, 5, -4, 2, 5}).