大致題意:
輸入一個數列,找到從哪個數到哪個數的和最大,即最大子串(區分於子序列)
輸出子串和的最大值已經最大子串開頭和結尾的下標,並輸出。
!!!我一開始寫的時候定義max=-1,忽略了幾個數的和可能比-1還小的可能性。。。。。
[cpp]
#include<iostream>
using namespace std;
int a[100000]={0};
void main()
{
int t,n;
int max=0;
cin>>t;
for(int j=1;j<=t;j++)
{
cin>>n;
int sum=0,temp=0,b=0,e=0;
for(int max=-10000,i=0;i<n;i++)//我當時寫成-1,調了好久,沒想到是這麼個錯誤
{
cin>>a[i];
if(sum>=0)
{
sum+=a[i];
}
else
{
sum=a[i];
temp=i;
}
if(sum>max)
{
max=sum;
b=temp;
e=i;
}
}
printf("Case %d:\n",j);
printf("%d %d %d\n",max,b+1,e+1);
if(j<t)
cout<<endl;
}
}