hdu 1024 最大M子段和

来源:互联网 发布:淘宝店价格表 编辑:程序博客网 时间:2024/06/07 01:25

这里讲得很详细了。

http://www.cnblogs.com/dongsheng/archive/2013/05/28/3104629.html

这题得注意n很大,而m题目中并未告知范围。看discuss里说,m很小不超过100,因此O(n*m)的算法可以过。

#include<cstdio>#include<cstring>#include<map>#include<algorithm>#include<set>#include<iostream>#include<cmath>using namespace std;typedef long long LL;typedef double db;#define N 1000005//int dp[205][205],a[205],M[205];LL p[N],a[N];int main(){    LL n,m,i,j,k,t;    while(~scanf("%lld%lld",&m,&n))    {        for(i=1;i<=n;++i) {p[i]=0;scanf("%lld",&a[i]);}        for(i=1;i<=m;++i)        {            for(t=0,j=1;j<=i;++j) t+=a[j];            p[n]=t;            for(j=i+1;j<=n;++j)            {                t=max(p[j-1],t)+a[j];                p[j-1]=p[n];                p[n]=max(p[n],t);                //dp[i][j]=dp[i][j-1]+a[j];                //for(k=i-1;k<j;++k) dp[i][j]=max(dp[i][j],dp[i-1][k]+a[j]);            }        }        printf("%lld\n",p[n]);    }    return 0;}


0 0
原创粉丝点击