举例描述
以- 2,11,-4, 13,- 5, - 2为例。
刚开始ans和sum均为0。
到达-2时,sum+(-2)< 0,置sum为0,不更新ans。
到达l1时,sum+11>0,置sum为11,更新ans为11。
到达-4时,sum+(-4)>0,置sum为7,不更新ans。
到达13时,sum+13>0,置sum为20,更新ans为20。
到达一5时,sum +(-5)> 0,置sum为15,不更新ans。
到达-2时,sum +(-2)> 0,置sum为13,不更新ans。
得到最后答案为20。
样例一
6
-2 11 -4 13 -5 -2
20
样例二
6
-2 -11 -4 -13 -5 -2
-2
代码:
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int a[n], dp[n] = { 0 };
for (int i = 0 ; i < n; i++)
{
scanf("%d", &a[i]);
}
dp[0] = a[0];
int ans = -0x3f3f3f3f;
for (int i = 0; i < n; i++)
{
dp[i] = max(a[i], dp[i - 1] + a[i]);
ans = max(dp[i], ans);
}
printf("%d\n", ans);
return 0;
}