1007 Maximum Subsequence Sum
题目大意
统计最大子序列的和,输出首尾元素
算法思想
- 注意题目特殊要求,是要输出首尾元素
- 如果全为负,需要输出0,以及整个序列的首尾元素
- 仅当大于时才会改变,满足相等时,输出的是较小的i和j
代码
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int k;
int i, j;
cin >> k;
vector<int>s;
bool ne = false;
for (i = 0; i < k; i++)//输入
{
int q;
cin >> q;
s.push_back(q);
if (q >= 0)//判断是否全负
{
ne = true;
}
}
int max=s[0];//初始化
int sum = 0;
int op=s[0], ed=s[s.size()-1];
if (ne == true)//不为全负
{
for (i = 0; i < k; i++)
{
if (s[i] < 0)//如果当前i的值为负,可以跳过
continue;
sum = 0;
for (j = i; j < k; j++)
{
sum += s[j];//统计从i到j的和
if (sum < 0)//当前和为负,跳过该i
break;
if (sum > max)//仅当sum大于max时,才会改变
{
max = sum;
op = s[i];
ed = s[j];
}
}
}
}
else//全负
{
max = 0;
}
cout << max << " " << op << " " << ed;
}```