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 }