hdu 1024 经典DP 最大m字段和

//最大m段字段和!!
#include
#include
#include
#include
#include
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

你可能感兴趣的:(动态规划)