hdu 1003 解题报告 ---- Max Sum

来源:互联网 发布:神马软件站 编辑:程序博客网 时间:2024/05/29 18:15

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,则丢弃,启示节点下次将会变成当前的下一个元素,

原创粉丝点击