要想找到符合条件的序列,我们应该有以下条件
一个数重头开始遍历相加,如果这个数大于0的话,继续加后面的数,如果小于0的话,重后面的数开始重新遍历;
这个过程中保证了大数一定会出现,所以应该找出大数;
sum大于0的话,与后面的数相加有可能是最大数;
如果小于0,则,重新开始会比以前的数更大;
一下是我的代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int T,n;
int from;
int bs,es;
int i;
int maxn,sum,k;
int cnt=0;
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
maxn=-99999999;
sum=0;
from=1;
for(i=1;i<=n;i++)
{
scanf("%d",&k);
sum+=k;
if(sum>maxn)
{
maxn=sum;
bs=from;
es=i;
}
if(sum<0)
{
from=i+1;
sum=0;
}
}
printf("Case %d:\n",++cnt);
printf("%d %d %d\n",maxn,bs,es);
if(T)
printf("\n");
}
return 0;
}