求最大子列和:动态规划
定状态:
b[j]:前j个数的最大子列和
状态转移方程:
b[j] = max{b[j-1]+a[j],a[j]}, 1<=j<=n
b[j]表示1~j序列的最大子列和
#include <cstdio>
#include <algorithm>
#define N 1000005
using namespace std;
int n;
int a[N];
int maxsum()
{
int sum = 0, b = 0;
for (int i = 1; i <= n; i++)
{
if (b > 0) b += a[i];
else b = a[i];
if (b > sum) sum = b;
}
return sum;
}
int main()
{
while (~scanf("%d", &n))
{
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
int ans = maxsum();
printf("%d\n", ans);
}
return 0;
}