概述
2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5
Case 1: 14 1 4 Case 2: 7 1 6
题意:求一个数组,连续子数列的最大和,以及它的开始点和结束点
#include<stdio.h>
int a[1000001];
int main()
{
int t,k=1,m,i;
scanf("%d",&t);
while(t--)
{
int sta,end,st=1,en,sum=0,ans=-999999999;//一定定义在while里面,否则多组数据时会出错
scanf("%d",&m);
for(i=1;i<=m;i++)
scanf("%d",&a[i]);
for(i=1;i<=m;i++)
{
if(sum>=0)
{
sum+=a[i];en=i; //因为加一个负数一定是在变小,所以只有大于0时才进行
}
else {
sum=a[i];
st=i;
en=i;
}
if(sum>ans)
{
end=en;//这里全部是最后要输出的符合题意的结果
sta=st;
ans=sum;
}
}
printf("Case %d:n",k++);
printf("%d %d %dn",ans,sta,end);输出的最大值是ans,不是sum因为可能最后一次加得的结果小于倒数第二次的结果。必须进行一次比较
if(t)
printf("n");//输出格式要注意
}
return 0;
}
最后
以上就是隐形耳机为你收集整理的hdu 1003 求连续子数列的最大和的全部内容,希望文章能够帮你解决hdu 1003 求连续子数列的最大和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复