1. 程式人生 > >求最大子列和 dp

求最大子列和 dp

求最大子列和:動態規劃
定狀態:
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;
}