现在的位置: 首页 > 综合 > 正文

hdu 1024 Max Sum Plus Plus (最大m子段和)

2013年12月03日 ⁄ 综合 ⁄ 共 559字 ⁄ 字号 评论关闭
#include<string.h>
#include<stdio.h>
#include<iostream>
using namespace std;
const long long mod=1e9+7;
const int MAXN = 1000005;

int max(int a ,int b){
    return a > b ? a : b;
}
int n;

int num[1000005];

int dp[2][MAXN];
int rev;
int temp;
int ans;
int m;
int main(){

    while(~scanf("%d" , &m)){
        ans = -0x3f3f3f3f;
        scanf("%d" , &n);
        rev = 1;
        for(int i = 1 ; i <= n ; i ++){
            scanf("%d" , &num[i]);
        }
        memset(dp[0],0,sizeof(dp[0]));
        memset(dp[1],0,sizeof(dp[1]));

        for(int i = 1 ; i <= m ; i ++){
            ans = -0x3f3f3f3f;
            for(int j = i; j <= n ; j ++){

                dp[1][j] = max(dp[1][j - 1] , dp[0][j - 1]) + num[j];
                dp[0][j - 1] = ans;
                if(ans < dp[1][j]) ans = dp[1][j];
            }

        }
        printf("%d\n" , ans);
    }


   return 0;
}

抱歉!评论已关闭.