是道常规的动态规划题,不过我有被卡住(丢脸
需要考虑当序列整体求和为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;
}