HDU 1231

求最大连续子序列

一开始想到的一种O(n^2)的算法,应该会超时

后来想出了下面的方法

#include <iostream>
using namespace std;
struct DP{
    int sum,sta,end;
    void init(int su,int st,int en){
        sum=su;
        sta=st;
        end=en;
    }
};
int a[10000];
int main()
{
    int t;
    while(cin>>t){
        if(0==t)break;
        for(int i=0;i<t;i++){
            cin>>a[i];
        }
        DP tem,max;
        tem.init(0,0,0);
        max.init(a[0],0,0);
        for(int i=0;i<t;i++){
            tem.end=i;
            tem.sum+=a[i];
            if(tem.sum>max.sum&&tem.sum>=0){
                max.init(tem.sum,tem.sta,tem.end);
            }
            if(tem.sum<0){            //当tem.sum<0的时候,直接放弃这一段
                tem.init(0,i+1,i+1);
            }

        }
        if(max.sum<0)cout<<"0 "<<a[0]<<" "<<a[t-1]<<endl;               //所有的元素都小于0的时候,输出0,a[0],a[t-1];
        else cout<<max.sum<<" "<<a[max.sta]<<" "<<a[max.end]<<endl;
    }
}

最大连续子序列

原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3853586.html