简单的动规问题,题目的大概意思就是给一个数组,求这个数组子序列的最大值
这个题目其实不需要建立数组,设一个变量sum来存储它的值,当这个sum值小于0的时候就把它置零
然后再用两个变量来保存开始和结束的子序列的下标
当开始做的时候我还使用了二维数组的做法,使用了三层for循环,结果可想而知,超时
后来用这个方法提交的时候,好几次都是格式错误,比较坑了
输入
1
5 6 -1 5 4 -7
输出
15
#include<stdio.h>
int main()
{
int n,m,a,x1,x2,x,m1,sum;
scanf("%d",&n);
m1=1;
while(n--)
{
sum=0;
x1=x2=x=1;
scanf("%d",&m);
int max=-9999;
for(int i=0;i<m;i++)
{
scanf("%d",&a);
sum+=a;
if(sum>max)
{
max=sum;
x1=x;
x2=i+1;
}
if(sum<0)
{
sum=0;
x=i+2;
}
}
if(m1!=1)
printf("\n");
printf("Case %d:\n%d %d %d\n",m1,max,x1,x2);
m1++;
}
return 0;
}