码迷,mamicode.com
首页 > 其他好文 > 详细

poj 2479 - Maximum sum

时间:2014-09-17 21:53:22      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:io   for   c   amp   r   bs   as   dp   poj   

题目:找到一个序列中的两个连续段使得他们的和最大。

分析:dp,最大字段和。双向求最大字段和,枚举结束点找到加和最大值。

说明:与合唱队形类似。(同poj2593)(2011-09-24 02:09)

#include <stdio.h>
#include <stdlib.h>

int data[ 50005 ];
int asum[ 50005 ];
int bsum[ 50005 ];

void msum( int *D,int *A, int a, int b, int s )
{
    int sum = 0;
    for ( int i = a ; i != b ; i += s ) {
        if ( sum < 0 ) sum = 0;
        sum += D[ i ];
        A[ i ] = sum;
    }
    int max = A[ a ];
    for ( int i = a+s ; i != b ; i += s )
        if ( max < A[ i ] ) max = A[ i ];
        else A[ i ] = max;
}

int main()
{
    int t,n;
    while ( scanf("%d",&t) != EOF ) 
    while ( t -- ) {
        scanf("%d",&n);
        for ( int i = 1 ; i <= n ; ++ i )
            scanf("%d",&data[ i ]);
            
        msum( data, asum, 1, n, +1 );
        msum( data, bsum, n, 1, -1 );

        int    max = -20000;
        for ( int i = 1 ; i <  n ; ++ i )
            if ( max < asum[ i ] + bsum[ i+1 ] )
                max = asum[ i ] + bsum[ i+1 ];
        
        printf("%d\n",max);
    }
    return 0;
}
 

poj 2479 - Maximum sum

标签:io   for   c   amp   r   bs   as   dp   poj   

原文地址:http://blog.csdn.net/mobius_strip/article/details/39348593

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!