POJ 2479 Maximum sum

来源:互联网 发布:花朵授粉算法 编辑:程序博客网 时间:2024/04/30 10:48

Maximum sum

题目很简单,dp问题,就是求最大子段和问题。代码如下:

#include<stdio.h>#include<string.h>#define MAXN 50005int num[MAXN]  ;int lsum[MAXN] ;int rsum[MAXN] ;int n ;void work(){int i ;scanf("%d" , &n) ;for(i = 1 ; i <= n ; i ++){scanf("%d" , &num[i]) ;}memset(lsum , 0 , sizeof(lsum)) ;memset(rsum , 0 , sizeof(rsum)) ;lsum[1] = num[1] ;for(i = 2 ; i <= n ; i ++){if(lsum[i-1] > 0){lsum[i] = lsum[i-1] + num[i] ;}elselsum[i] = num[i] ;}rsum[n] = num[n] ;for(i = n - 1 ; i >= 1 ; i--){if(rsum[i+1] > 0){rsum[i] = rsum[i+1] + num[i] ;}else rsum[i] = num[i] ;}int nmax = -1000000 ;int temp = -1000000 ;for(i = 1 ; i < n ; i ++){if(temp < lsum[i])temp = lsum[i] ;if(nmax < temp + rsum[i+1])nmax = temp + rsum[i+1] ;}printf("%d\n" , nmax) ;}int main(){int t ;scanf("%d" , &t) ;while(t--){work() ;}return 0 ;}


原创粉丝点击