文章
19
粉丝
69
获赞
30
访问
18.1k
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
// 输入序列
vector<int> seq(n);
for (int i = 0; i < n; i++)
{
cin >> seq[i];
}
vector<int> dp(n); // 以i结尾的连续子序列和
dp[0] = seq[0]; // 初始化dp数组第一元素
int head = 0, rear = 0;
int globalHead = head, globalRear = rear; // 最大序列和的起点、终点
int maxSum = max(dp[0], 0); // 初始化全局最大和
for (int i = 1; i < n; i++)
{
// 前面的序列和是负增益
if (dp[i - 1] < 0)
{
dp[i] = seq[i];
head = i;
rear = i;
}
else
{
dp[i] = seq[i] + dp[i - 1];
rear = i;
}
// 更新全局最大序列和的参数(等于的时候也不更新)
if (maxSum < dp[i])
{
maxSum = dp[i];
globalHead = head;
globalRear = rear;
}
}
cout << maxSum << ' ' << globalHead << ' ' << globalRear << endl;
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发