您的位置:首页 > 其它

hdu 1024 Max Sum Plus Plus(DP)

2014-07-29 21:38 411 查看
转移方程dp[i][j]=Max(dp[i][j-1]+a[j],max(dp[i-1][k] ) + a[j] ) 0<k<j

此链接中有详解点击打开链接

#include<stdio.h>

#include<algorithm>

#include<iostream>

using namespace std;

#define MAXN 1000000

#define INF 0x7fffffff

int dp[MAXN+10];

int mmax[MAXN+10];

int a[MAXN+10];

int max(int x,int y)

{
return x>y?x:y;

}

int main()

{

    int n,m;

    int i,j,mmmax;

    while(scanf("%d%d",&m,&n)!=EOF)

    {

        for(i=1;i<=n;i++)

        {

            scanf("%d",&a[i]);

            mmax[i]=0;

            dp[i]=0;

        }

        dp[0]=0;

        mmax[0]=0;    

        for(i=1;i<=m;i++)

        {

                mmmax=-INF;

                for(j=i;j<=n;j++)

                {

                    dp[j]=max(dp[j-1]+a[j],mmax[j-1]+a[j]);

                    mmax[j-1]=mmmax;

                    mmmax=max(mmmax,dp[j]);

                }    

        } 

        printf("%d\n",mmmax);  

          

    } 

    return 0;   

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: