hdu1003 Max Sum 解题报告
几个月都没A题目了 记得上次就在这个题目卡掉了 今天AC这个题 算是个继续吧
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003
考虑情况:
1.当第一个数是负数时: 考虑最大和全是负数的情况 取得最大负数并更新sum
核心来比较sum+list[i]和max的大小并更新max
当sum<0时令sum=0其实就是比较list和max的大小
/* Name:hdu1003总算AC了 Copyright: Author:yujiaao Date: Description:hdu */ #include<iostream> #include<cstdio> using namespace std; int list[1000000]; int main() { // freopen("C:\\Users\\yujiaao\\Desktop\\测试专用\\in.txt","r",stdin); // freopen("C:\\Users\\yujiaao\\Desktop\\测试专用\\out.txt","w",stdout); int ncase,max,start,end,i,ntest,sum,max_start,max_end; scanf("%d",&ncase); for(int j=0;j<ncase;j++) { memset(list,0,sizeof(list)); start=0; sum=0; scanf("%d",&ntest); sum=0; max=-10000; max_start=0; max_end=0; start=0; end=0; for(i=0;i<ntest;i++) { scanf("%d",&list[i]); if(max<0)//全是负数的情况 { if(list[i]>max) { max=list[i]; max_start=i; max_end=i; start=i; end=i; sum=list[i]; } } else { end=i; if(sum<0) { sum=0; start=i; // end=i; } if( (sum+list[i])>max ) { max=sum+list[i]; max_start=start; max_end=end; } sum+=list[i]; } } if(j!=0) { printf("\n"); } printf("Case %d:\n%d %d %d\n",j+1,max,max_start+1,max_end+1); } // system("pause"); return 0; }