InputEach test case will begin with two integers m and n, followed by n integers S
1, S
2, S
3 ... S
n.
Process to the end of file.
OutputOutput the maximal summation described above in one line.
Sample Input
1 3 1 2 3 2 6 -1 4 -2 3 -2 3
Sample Output
6 8
Hint
Huge input, scanf and dynamic programming is recommended.
#include <bits/stdc++.h> #define INF 1<<30 using namespace std; int a[1000005]; int dp[1000005]={0}; int lmax[1000005]={0}; int main() { int m,n; while(scanf("%d%d",&m,&n)!=EOF) { int i,j; memset(dp,0,sizeof(dp)); memset(lmax,0,sizeof(lmax)); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } int ans=0; for(i=1;i<=m;i++) { ans=-INF; for(j=i;j<=n;j++) { dp[j]=max(dp[j-1]+a[j],lmax[j-1]+a[j]); lmax[j-1]=ans; ans=max(ans,dp[j]); } } cout<<ans<<endl; } return 0; }
HDU1024 Max Sum Plus Plus (优化线性dp)
原文:https://www.cnblogs.com/lipoicyclic/p/12324242.html