题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805514284679168
这题主要有两点
- 特判全为负数的情况漏了
- 可以使用start数组记录最开始的下标
代码
#include<vector>#include<cstdio>using namespace std;const int maxn = 10010;vector<int> number(maxn, 0), dp(maxn), start(maxn);int main(){int n, max = 0;bool flag = false;scanf("%d", &n);for(int i = 0; i < n; i++) {scanf("%d", &number[i]);if(number[i] >= 0) flag = true;}if (flag == false){printf("0 %d %d", number[0], number[n - 1]);return 0;}dp[0] = number[0];for(int i = 1; i < n; i++){if(number[i] >= dp[i - 1] + number[i]){dp[i] = number[i];start[i] = i;} else {dp[i] = dp[i - 1] + number[i];start[i] = start[i - 1];}if(dp[i] > dp[max]) max = i;}printf("%d %d %d" ,dp[max], number[start[max]], number[max]);}
