AcWing 1479. 最大子序列和
原题链接
中等
作者:
Karma
,
2020-04-17 05:56:51
,
所有人可见
,
阅读 682
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e4 + 10;
int v[N];
int dp[N];
int head[N];
int main()
{
int k;
scanf("%d", &k);
bool flag = false;
for(int i = 1; i <= k; i++)
{
scanf("%d", &v[i]);
if(v[i] >= 0) flag = true;
}
if(!flag)
{
printf("0 %d %d\n", v[1], v[k]);
return 0;
}
dp[1] = v[1];
head[1] = 1;
for(int i = 2; i <= k; i++)
{
if(dp[i-1] + v[i] >= v[i])
{
dp[i] = dp[i-1] + v[i];
head[i] = head[i-1];
}
else
{
dp[i] = v[i];
head[i] = i;
}
}
int max_index = 0;
int max_value = 0xc0c0c0c0;
for(int i = 1; i <= k; i++)
{
if(dp[i] > max_value)
{
max_index = i;
max_value = dp[i];
}
}
printf("%d %d %d\n", dp[max_index], v[head[max_index]], v[max_index]);
}