hdu1003 Max Sum(最大子串)

https://vjudge.net/problem/HDU-1003

注意考虑如果全为负的情况,特判。

还有输出格式,最后一个输出不用再空行。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #include<cmath> 
 7 #define lson l, m, rt<<1
 8 #define rson m+1, r, rt<<1|1
 9 #define IO ios::sync_with_stdio(false);cin.tie(0);
10 #define INF 1e9
11 typedef long long ll;
12 using namespace std;
13 int n, m, a[100010];
14 int main()
15 {
16     IO;
17     cin >> n;
18     int kase=0;
19     while(n--){
20         cin >> m;
21         for(int i = 0; i < m; i++){
22             cin >> a[i];
23         }
24         int sum = 0, maxm = -INF;
25         int from = 0;
26         int ans1 = 0, ans2 = -1;
27         for(int i = 0; i < m; i++){
28             sum += a[i];
29             if(sum < 0){
30                 sum = 0;
31                 from = i+1;
32             }
33             else{
34                 if(sum > maxm){
35                     maxm = sum;
36                     ans1 = from;
37                     ans2 = i;
38                 } 
39             }
40         }
41         cout << "Case " << ++kase << ":" << endl;
42         if(ans2 == -1){//sum一直小于零,每位<0   
43             maxm = -INF;
44             for(int i = 0; i < m; i++){
45                 if(a[i] > maxm){
46                     maxm = a[i];
47                     ans1 = i; ans2 = i;
48                 }
49             }
50             cout << maxm << " " << ans1+1 << " " << ans2+1 << endl;
51         }
52         else
53             cout << maxm << " " << ans1+1 << " " << ans2+1 << endl;
54         if(n != 0) cout << endl;
55     }
56     return 0;
57 }

 

posted @ 2018-04-19 01:09  Surprisez  阅读(120)  评论(0编辑  收藏  举报