求最大连续子序列
一开始想到的一种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.init(0,i+1,i+1);
}
}
if(max.sum<0)cout<<"0 "<<a[0]<<" "<<a[t-1]<<endl;
else cout<<max.sum<<" "<<a[max.sta]<<" "<<a[max.end]<<endl;
}
}
原文地址:http://www.cnblogs.com/Mr-Xu-JH/p/3853586.html