hdu 1003 Max Sum
下面模拟过程:
1.首先,读取第一个数据,令now和max等于第一个数据,初始化first,last,x位置
2.然后,读入第二个数据,判断 ①. 若是now+next<next,表示当前读入的数据比之前存储的加上当前的还大,说明可以在当前另外开始记录,更新now=next ②. 反之,则表示之前的数据和在增大,更新now=now+next
3.之后,把now跟max做比较,更新或者不更新max的值,记录起始、末了位置
4.循环2~3步骤,直至读取数据完毕。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int n,i,m,max,now,j,next,first,last,x; 6 cin>>n; 7 for(i=1;i<=n;i++) 8 { 9 cin>>m; 10 cin>>next; 11 now=max=next; 12 last=1;first=1;x=1; 13 for(j=2;j<=m;j++) 14 { 15 cin>>next; 16 if(now+next<next) 17 { 18 now=next; 19 x=j; 20 21 } 22 else 23 { 24 now+=next; 25 } 26 if(now>max) 27 { 28 max=now; 29 first=x; 30 last=j; 31 } 32 } 33 cout<<"Case "<<i<<":"<<endl; 34 cout<<max<<" "<<first<<" "<<last<<endl; 35 if(i!=n) 36 cout<<endl; 37 } 38 }