hdu 1003 解题报告 ---- Max Sum
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1003
代码中两个if判断:
(1)若当前序列之和sum大于max,则改变end坐标为当前坐标,max=sum
(2)若sum<0,则丢弃,启示节点下次将会变成当前的下一个元素,
#include <stdio.h>
#include <string.h>
int main(){
int m,n,k,temp;
int start,end,max,sum,x,i;
scanf("%d",&n);
k=0;
while(k++<n){
max=-100000;
sum=0;
temp=1;
scanf("%d",&m);
for (i=0;i<m;i++){
scanf("%d",&x);
sum+=x;
if(sum>=max){
max=sum;
start=temp;
end=i+1;//end坐标为目前最后一个坐标
}
if(sum<0){
sum=0;//若逐渐递减到0了,则sum清零,并且改变下次启示坐标为i+2
temp=i+2;//下次改变max值时的start坐标
}
}
printf("Case %d:\n%d %d %d\n",k,max,start,end);
if(k<n)
printf("\n");
}
return 0;
}
代码中两个if判断:
(1)若当前序列之和sum大于max,则改变end坐标为当前坐标,max=sum
(2)若sum<0,则丢弃,启示节点下次将会变成当前的下一个元素,