hdu 1024 经典DP 最大m字段和

来源:互联网 发布:单片机setb 编辑:程序博客网 时间:2024/06/05 18:49
//最大m段字段和!!#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int maxn=1000002;const int INF=1<<30;int dp[2][maxn],a[maxn],n,m;int max(int a,int b){    return a>=b?a:b;}int main(){    freopen("//media/学习/ACM/input.txt","r",stdin);    while(~scanf("%d%d",&m,&n))    {        int i,j,ans=-INF;        for(i=1;i<=n;i++)scanf("%d",&a[i]);        memset(dp[0],0,sizeof(dp[0]));        memset(dp[1],0,sizeof(dp[1]));        for(i=1;i<=m;i++)        {            ans=-INF;//代表j之前 最大的字段和            for(j=i;j<=n;j++)            {                dp[1][j]=max(dp[1][j-1],dp[0][j-1])+a[j];                dp[0][j-1]=ans;                if(ans<dp[1][j])ans=dp[1][j];            }        }        printf("%d\n",ans);    }    return 0;}