最大连续和问题。
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100000+5;
int s[maxn];
int main(){
int T;
scanf("%d",&T);
int n,cnt=0;
while(T--){
s[0]=0;
scanf("%d",&n);
int tmp;
for(int i=1;i<=n;++i) {
scanf("%d",&tmp);
s[i]=tmp+s[i-1];
}
if(cnt) printf("\n");
int best=-100000000, mint=100000000;
int l=1,r=1,tl=1;
for(int i=1;i<=n;++i) {
//mint=min(mint,s[i-1]);
//best=max(best,s[i]-mint);
if(mint>s[i-1]) {tl=i; mint=s[i-1];}
if(best<s[i]-mint) {r=i; l=tl; best=s[i]-mint;} //更新最大值,起始坐标
}
printf("Case %d:\n",++cnt);
printf("%d %d %d\n",best,l,r);
}
return 0;
}
如有不当之处欢迎指出!