题目:
题目来源:http://vjudge.net/contest/view.action?cid=49759#problem/D
题解:这道题就是求连续子序列的和的最大值,并输出子序列的开头位置和结束位置;
注意如何确定起点与终点;
代码:
#include<cstdio>
using namespace std;
#define MAX 100005
int main()
{
int T,N,i,j,M,curM,a[MAX],temfron,fron,rear,cnt=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&N);
i=0,temfron=0,fron=1,rear=1;
while(N--)
scanf("%d",&a[i++]);
curM=a[0];M=a[0];
for(j=1;j<=i-1;j++)
{if(curM<0)
curM=a[j],temfron=j;
else curM=a[j]+curM;
if(curM>M) M=curM,fron=temfron+1,rear=j+1;}
printf("Case %d:\n%d %d %d\n",cnt++,M,fron,rear);
if(T) printf("\n");
}
return 0;
}