풀이법
1) 점화식을 구현한다면 누구나 쉽게 풀 수 있는 문제라고 생각한다.
메모이제이션을 활용하여 현재까지의 최대 합을 구하고 이를 ret이라는 변수에 담아 최대를 반환하게 했다.
max(직전까지 최대 합+ 현재 값, 현재 값)
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int c[100001];
int d[100001];
int res = -100000000;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
c[i] = a;
}
d[0] = c[0];
for (int i = 1; i < n; i++)
{
d[i] = max(d[i - 1] + c[i], c[i]);
res = max(d[i], res);
}
res = max(d[0], res);
cout << res;
}
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 2193번: 이친수 (0) | 2021.04.21 |
---|---|
BaekJoon 11659번: 구간 합 구하기 4 (0) | 2021.04.19 |
BaekJoon 11726번: 2xn 타일링 (0) | 2021.04.17 |
BaekJoon 1149번: RGB거리 (0) | 2021.04.16 |
BaekJoon 2579번: 계단 오르기 (0) | 2021.04.12 |