hdu1003最大子序列和

看了一些别人的题解,说实话,我现在还不会证明这个,我不知道为什么这样是最大值

//hdu1003最大连续子序列和
// sum[i] = sum[i-1]>0 ? sum[i-1]+a[i]:a[i];
//只有当sum处于增长状态时才会得到最大子序列
//当sum处于减小状态时,应当更新起点
 
#include <iostream>
using namespace std;

#define MAX 100003
#define INF 0x7fffffff;
int T;
long N;

int input,beg,end,sum,max_sum,pos;    
//定义输入值,最长序列启始和终至位置 ,序列当前和,序列最大和 

int main()
{
    cin>>T;
    for(int i = 1; i <= T; i++)
    {
            sum = 0;
            max_sum = -INF;
            beg = end = pos = 1;
            cin>>N;
            for(int j = 1; j <= N; j++)
            {
                    cin>>input;
                    if(sum < 0)
                    {
                           sum = input;
                           pos = j;
                    }
                    else
                    {
                        sum += input;
                    }
                    
                    if(sum > max_sum)     //更新序列信息 
                    {
                           max_sum = sum;
                           beg = pos;
                           end = j;
                    }
            }
            
            cout<<"Case "<<i<<":"<<endl;
            cout<<max_sum<<" "<<beg<<" "<<end<<endl;
            if(i != T)                      //PE若干次,千万要注意 
                 cout<<endl;
    }
    return 0;
}


你可能感兴趣的:(hdu1003最大子序列和)