티스토리 뷰
d[i] : a[i]를 마지막에 포함하는 가장 큰 연속합
d[i]=max(d[i-1]+a[i], a[i])
정답 : max(d[i])
#include <iostream>
#include <algorithm>
using namespace std;
int d[100001];
int a[100001];
int main(void) {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
d[1] = a[1];
for (int i = 2; i <= n; i++) {
d[i] = max(d[i - 1] + a[i], a[i]);
}
int result = d[1];
for (int i = 2; i <= n; i++) {
if (result < d[i])
result = d[i];
}
cout << result << endl;
return 0;
}
'백준 알고리즘 기초 강좌' 카테고리의 다른 글
3장 다이나믹 프로그래밍 - (5) 문제 풀이 1 [1699번 - 제곱수의 합] (0) | 2017.08.25 |
---|---|
3장 다이나믹 프로그래밍 - (4) 문제 풀이 6 [2579번 - 계단 오르기] (0) | 2017.08.20 |
3장 다이나믹 프로그래밍 - (4) 문제 풀이 4 [11054번 - 가장 긴 바이토닉 부분 수열] (0) | 2017.08.20 |
3장 다이나믹 프로그래밍 - (4) 문제 풀이 3 [11722번 - 가장 긴 감소하는 부분 수열] (0) | 2017.08.18 |
3장 다이나믹 프로그래밍 - (4) 문제 풀이 2 [11053번 - 가장 큰 증가하는 부분 수열] (0) | 2017.08.18 |
댓글