1.题目编号
1001
2.简单题意
给你一组数,求出最大的子序列的和,并说出起始位置
3.解题思路
该题目要求求出最大的子序列的和,因此要找出此组数中最大的连续子序列,前i项中只要大于0就可以加入子序列,若后续数字的和也大于0则继续相加,直到求出最大值,同时在相加过程中,记录数字位置
4.感想
上课老师讲的例题,按照例题讲解来解的题,但第一次做总是有些错误
5.代码
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int i,a=1,T,s,e,n,x,M,N,max;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&M);
if(i==1)
{
max=N=M;
x=s=e=1;
}
else {
if(M>M+N)
{
N=M;
x=i;
}
else N+=M;
}
if(N>max)
max=N,s=x,e=i;
}
printf("Case %d:\n%d %d %d\n",a++,max,s,e);
if(T)printf("\n");
}
return 0;
}