这个题有个分治的想法是o(nlogn),动态规划的想法是o(n),用动态规划就好了,一开始总是wa,是那个位置标记错了,当最大值变的时候再改变开始位置和最终位置。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
int t,j=1;
scanf("%d",&t);
while(t--)
{
int n,b,a[100005],st,sz,po;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
int sum=a[1];
st=1;sz=1;po=1;
b=a[1];
for(int i=2;i<=n;i++){
if(b+a[i]>=a[i]){
b=b+a[i];
}
else {b=a[i];po=i;}
if(b>sum){sum=b;st=po;sz=i;}
}
printf("Case %d:\n",j);
j++;
printf("%d %d %d\n",sum,st,sz);
if(t){printf("\n");}
}
}