dp方程为这个
dp[i][j]=Max(dp[i][j-1]+a[j] , max( dp[i-1][k] ) + a[j] ) 0<k<j
因为i有跟没有一样,故可以化为一维的,但是 max( dp[i-1][k] ) + a[j] ) 0<k<j 该怎样求呢!只有神知道
具体跟最大联系和一样,不要问我怎么想到的,我不知道,我也是看了别人的菜知道的
详细见http://www.cnblogs.com/kuangbin/archive/2011/08/04/2127085.html
#include<iostream> #include<cstdio> using namespace std; const int maxn=1000001; const int inf=99999999; int dp[maxn],num[maxn],a[maxn]; int main() { //freopen("in.txt","r",stdin); int n,m,mmaxx; while (scanf("%d%d",&m,&n)!=EOF) { for (int i=1;i<=n;i++) { scanf("%d",&a[i]); dp[i]=0; num[i]=0; } dp[0]=num[0]=0; for (int i=1;i<=m;i++) { mmaxx=-inf; for (int j=i;j<=n;j++) { dp[j]=max(dp[j-1]+a[j],num[j-1]+a[j]); num[j-1]=mmaxx; mmaxx=max(dp[j],mmaxx); } } printf("%d ",mmaxx); } //fclose(stdin); return 0; }