
#include<bits/stdc++.h>
using namespace std;
int dp[100001];
int arr[100001];
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
dp[1] = arr[1];
int ans = dp[1];
for (int i = 2; i <= n; i++) {
dp[i] =arr[i];
if (dp[i-1]+dp[i]>dp[i]) {
dp[i] += dp[i - 1];
}
ans = max(ans, dp[i]);
}
cout << ans;
}
dp에는 dp[i]=i 번째까지 연속된 수열의 합이 저장된다.
- 즉 dp[i-1]+dp[i]>dp[i] 보다 크게되면 연속적으로 수열의 합에 참여시킨다.
- 만약 dp[i]가 더 크다면 새로운 수열의 합의 시작점이 된다.
최대값을 출력해야 하므로, ans에 최대값을 저장하고 마지막으로 출력한다.
'Algorithm' 카테고리의 다른 글
| [백준] 알고리즘 1699번 - 제곱수의 합 문제 (0) | 2020.12.11 |
|---|---|
| [백준] 알고리즘 2579번 - 계단 오르기 문제 (0) | 2020.12.01 |
| [백준] 알고리즘 1157번 - 단어공부 문제 (0) | 2020.11.23 |
| [백준] 알고리즘 2562번 - 최댓값 문제 (0) | 2020.11.22 |
| [백준] 알고리즘 1152번 - 단어의 개수 (0) | 2020.11.22 |
