hdu 1024 Max Sum Plus Plus

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\n",mmaxx);
    }
    //fclose(stdin);
    return 0;
}

 

posted @ 2014-04-24 16:48  Hust_BaoJia  阅读(119)  评论(0编辑  收藏  举报
努力