hdoj1024 //dp

#include <stdio.h>  
#include <stdlib.h>  
#include <limits.h>  
  
int MaxSum(int * data, int m, int n){  
    int i, j, max_sum;  
    int * cur = (int *)calloc(n + 1, sizeof(int));  
    int * pre = (int *)calloc(n + 1, sizeof(int));  
    data = data - 1;  //data下标从0开始, cur、pre下标从1开始,为使下标一致,data减1  
    for (i = 1; i <= m; ++i){  
        max_sum = INT_MIN;  
        for (j = i; j <= n; ++j){  
            if (cur[j - 1] < pre[j - 1])  
                cur[j] = pre[j - 1] + data[j];  
            else  
                cur[j] = cur[j - 1] + data[j];  
            pre[j - 1] = max_sum;  
            if (max_sum < cur[j])  
                max_sum = cur[j];  
        }  
        pre[j - 1] = max_sum; 
    free(cur);  
    free(pre); 
    return max_sum;  
}  
  
int main(void){  
    int m, n, i, *data;  
    while (scanf("%d%d", &m, &n) != EOF){  
        data = (int *)malloc(sizeof(int) * n);  
        for (i=0; i<n; ++i){  
            scanf("%d", &data[i]);  
        }  
        printf ("%d\n", MaxSum(data, m, n));  
        free(data);  
    }  
  
    return 0;  
}  

猜你喜欢

转载自blog.csdn.net/dukig/article/details/80199925