本来不想写的
以前写过一次没过
现在每次打开HDU都会显示没完成
看着不爽
直接暴力肯定超时
其实那数组遍历一次就可以了
注意下标变化的条件
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int T; 8 cin>>T; 9 int t = 0; 10 while(T--) 11 { 12 t++; 13 int N; 14 cin>>N; 15 16 int begin = 1; 17 int end = 1; 18 int left = 1;//这个是每一次累加的左端 19 int max = 0; 20 int sum =0; 21 22 for(int i = 1;i<=N;i++) 23 { 24 int temp; 25 cin>>temp; 26 if(i==1) 27 { 28 max = temp; 29 } 30 sum+=temp; 31 if(max<sum)//把这一次累加更新为最大的 32 { 33 max = sum; 34 begin = left; 35 end = i; 36 } 37 if(sum<0)//小于0了那么前面都不要了 38 { 39 sum = 0; 40 left = i+1;//此位为负,直接到下一位 41 } 42 } 43 44 cout<<"Case "<<t<<":"<<endl<<max<<" "<<begin<<" "<<end<<endl; 45 46 if(T) 47 cout<<endl; 48 49 } 50 return 0; 51 }
原文地址:http://www.cnblogs.com/Run-dream/p/3862659.html