hdu 1003 Max Sum (DP)
题意:给你一串数,输出此列数中连续不间断的子数的最大和,以及其开始的位置,结束的位置
按下面的程序分析::
j暂时存储开始的位置,结束的位置用end存,其中,当sum<0时,则不满足和最大的条件,所以j的位置加一(即j=i+1),注意最后输出时,开始和结束的位置要加一,因为循环变量i是从0开始加的。。。
#include"stdio.h" int main() { int sta,end,i,j,t,n,sum,max,m,count; scanf("%d",&t); count=0; while(t--) { count++; scanf("%d",&n); sta=end=0; max=-9999; sum=0;j=0; for(i=0;i<n;i++) { scanf("%d",&m); sum+=m; if(sum>max) { max=sum; sta=j; end=i; } if(sum<0) { sum=0; j=i+1; } } printf("Case %d:\n%d %d %d\n",count,max,sta+1,end+1); if(t) printf("\n"); } return 0; }