题意:给一串序列,求最大连续数列
思路:动态规划,只要加上该值为正就继续加,只要为负就舍弃这个值
注意点:
1、输出为首尾数字…(只看了样例的我…)
2、输入 2\n 0 0 输出0 0 0
#include<bits/stdc++.h>
using namespace std;
int num[10005];
int main(){
//输出的是第一个数字和最后一个数字啊姐姐T-T不是下标啊
int n;
cin>>n;
int tmp=0;
int maxx=-1;
int s=-1,e=-1;
int tmps=-1,tmpe=-1;
int f=0;
for(int i=0;i<n;i++){
cin>>num[i];
if(tmp+num[i]<0){
tmps=-1;
tmpe=-1;
tmp=0;
}else{
f=1;
if(tmps==-1){
tmps=i;
tmpe=i;
}else{
tmpe++;
}
if((tmp+num[i])>maxx){
s=tmps;
e=tmpe;
maxx=tmp+num[i];
// }else if((tmp+num[i])==maxx){
// if((tmpe-tmps)>(e-s)){
// s=tmps;
// e=tmpe;
// }
// 2 0 0 输出0 0 0
}
tmp+=num[i];
}
}
if(f==0)
cout<<"0 "<<num[0]<<" "<<num[n-1]<<endl;
else
cout<<maxx<<" "<<num[s]<<" "<<num[e]<<endl;
return 0;
}