1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
DP 문제 중 정말 간단하다 느꼈던 문제입니다. 당장 예제입력인 10 -4 3 1 5 6 -35 12 21 -1 수열을 살펴보겠습니다.
10 | -4 | 3 | 1 | 5 | 6 | -35 | 12 | 21 | -1 | |
연속합 | 10 | 6 | 9 | 10 | 15 | 21 | -14 | 12 | 33 | 32 |
이전 연속합에 현재 입력값을 더한 값과 입력값 중 큰 값을 갱신해주면 됩니다.
#include<iostream>
using namespace std;
#define MAX 100001
int DP[MAX];
int main(void)
{
int n; cin >> n;
int res = -1000;
DP[0] = -1000;
for (int i = 1; i <= n; i++) {
int temp; cin >> temp;
DP[i] = max(temp, DP[i - 1] + temp);
if (DP[i] > res) {
res = DP[i];
}
}
cout << res;
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 11047번: 동전 0 (0) | 2021.03.12 |
---|---|
[백준/C,C++] 12865번: 평범한 배낭 (0) | 2021.03.08 |
[백준/C,C++] 9251번: LCS (0) | 2021.03.08 |
[백준/C,C++] 2565번: 전깃줄 (0) | 2021.03.08 |
[백준/C,C++] 11054번: 가장 긴 바이토닉 부분 수열 (0) | 2021.03.08 |
댓글