求最大子列和 dp
阿新 • • 發佈:2019-01-30
求最大子列和:動態規劃
定狀態:
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; }