这几周一直在查找坐标序列之类的问题,上午正好有机会和大家讨论一下.
hdu 1003 解题告报 ---- Max Sum
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1003
#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,则弃丢,启发点节下次将会酿成以后的下一个元素,
文章结束给大家分享下程序员的一些笑话语录: 手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn