文章
134
粉丝
0
获赞
217
访问
14.7k
#include <bits/stdc++.h>
using namespace std;
int main() {
int k;
while (cin >> k) {
vector<int> a(k);
for (int i = 0; i < k; i++) {
cin >> a[i];
}
// 检查是否全负数
bool allNeg = true;
for (int x : a) {
if (x >= 0) {
allNeg = false;
break;
}
}
if (allNeg) {
cout << "0 0 0" << endl;
continue;
}
// dp[i] = 以i结尾的最大连续子序列和
// 用滚动变量优化
long long curSum = a[0]; // 当前连续子序列和
int curStart = 0; // 当前子序列起点
long long maxSum = a[0]; // 全局最大和
int maxStart = 0, maxEnd = 0; // 全局最优的起终点
for (int i = 1; i < k; i++) {
// 决策:从前面延续,还是从i重新开始
if (curSum + a[i] >= a[i]) {
// 延续前面的(>=保证i和j最小,相等时优先延续)
...
登录后发布评论
暂无评论,来抢沙发