是道常规的动态规划题,不过我有被卡住(丢脸
需要考虑当序列整体求和为0的情况。
#include<bits/stdc++.h>
using namespace std;int main()
{int k;vector<int> v;scanf("%d", &k);int temp;bool all_negative = true;for(int i = 0; i < k; i++){scanf("%d", &temp);v.push_back(temp);if(temp >= 0)all_negative = false;}if(all_negative == true){printf("0 %d %d", v[0], v[k-1]);return 0;}int dp[10005] = {v[0]};int tempi = 0, maxi = 0, maxj = 0;int maxn = dp[0];for(int i = 1; i < k; i++){if(v[i] > dp[i-1] + v[i])tempi = i;dp[i] = max(dp[i-1] + v[i], v[i]);if(dp[i] > maxn){maxn = dp[i];maxi = tempi;maxj = i;}}printf("%d %d %d", maxn, v[maxi], v[maxj]);return 0;
}