1007 Maximum Subsequence Sum

原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805514284679168

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 
 5 struct Node {
 6     int sum,i,j;
 7 };
 8 int FLAG = false,a[10010];
 9 int main() {
10     int n;
11     cin>>n;
12     for(int i = 0; i < n; ++i) {
13         cin>>a[i];
14         if(a[i] >= 0) FLAG = true;
15     }
16     if(FLAG == false) {
17         printf("0 %d %d\n",a[0],a[n-1]);
18     } else {
19         vector<Node> dp;
20         //边界
21         dp.push_back({a[0],0,0});
22         //状态转移方程
23         for(int i = 1; i < n; ++i) {
24             if(a[i] >= dp[i-1].sum + a[i]) {
25                 dp.push_back({a[i],i,i});
26             } else {
27                 dp.push_back({dp[i-1].sum + a[i],dp[i-1].i,i});
28             }
29         }
30         int k = 0;
31         for(int i = 1; i < n; ++i) {
32             if(dp[k].sum < dp[i].sum) k = i;
33         }
34         printf("%d %d %d\n",dp[k].sum,a[dp[k].i],a[dp[k].j]);
35     }
36     return 0;
37 }

 

posted @ 2020-07-07 19:34  tangq123  阅读(194)  评论(0编辑  收藏  举报