文章
19
粉丝
69
获赞
30
访问
17.8k
#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
int main()
{
int k;
while (cin >> k)
{
if (k == 0)
{
break;
}
vector<int> nums(k);
for (int i = 0; i < k; i++)
{
cin >> nums[i];
}
// dp数组
vector<ll> dp(k);
dp[0] = nums[0];
ll maxx = dp[0];
// 使用两对变量保存索引
int beginIndex = 0, maxBegin = beginIndex;
int endInex = 0, maxEnd = endInex;
for (int i = 1; i < k; i++)
{
// 负增益则前面的子序列抛弃
if (dp[i - 1] < 0)
{
dp[i] = nums[i];
beginIndex = i;
}
// 有增益时不抛弃
else
{
dp[i] = nums[i] + dp[i - 1];
}
// 更新保存最大字段和的相关变量
if (maxx < dp[i])
{
maxx = dp[i];
maxBegin = beginIndex;
maxEnd = i;
}
}
// 根据题目要求输出全为负数的情况
if (maxx < 0)
{
cout << 0 << " " << nums[0] << " " << nums[k - 1] << endl;
}
// 正常输出
else
{
cout <...
登录后发布评论
暂无评论,来抢沙发