연속합이 양수라면 계속해서 확인해도 된다. 하지만 음수가 된다면 해당하는 값은 다른 값과 이으면 손해이므로 연속합을 초기화해 주고 이어준다.
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
int n, num, sum = 0, ret = -1001;
cin >> n;
while (n--)
{
cin >> num;
sum += num;
ret = max(ret, sum);
if (sum < 0)
sum = 0;
}
cout << ret;
return 0;
}
만약 1이라도 남아있다면 다른 값과 이어서 더 커질 수 있다는 사실을 깨달으면 쉬워진다.