您的位置:首页 > 产品设计 > UI/UE

PAT-A 1007. Maximum Subsequence Sum (25)

2017-08-22 15:16 543 查看
注意点:

最大子序列的和,又要选取序号最小的。和为0的与和为负数的要分开来考虑。

题中数据好像没有给出以下情况例子

1 -1 2 2 3 -1

这个结果应该是

(1) 7 1 3

(2) 7 2 3

两种算法都能通过。按照题意应该是(1)

代码:

#include<iostream>
using namespace std;

int main()
{
int a[10005], s[10005];
int n, i, j, max, sum;
int left, right;
cin >> n;
for (i = 0; i < n; i++)
cin >> a[i];
max = 0;
s
= 0;
for (i = n - 1; i >= 0; i--)
{
s[i] = a[i] + s[i + 1];
if (s[i] < 0)
s[i] = 0;
}
for (i = 0; i < n; i++)
if (max < s[i])
{
max = s[i];
left = i;
}
if (max == 0)
{
for (i = 0; i < n;i++)
if (a[i] == 0)
{
cout << "0 0 0" << endl;
return 0;
}
cout << "0 " << a[0] << " " << a[n - 1] << endl;
return 0;
}
sum = a[left];
right = left;
while (sum < max)
{
right++;
sum += a[right];
}
cout << max << " " << a[left] << " " << a[right] << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: