【PAT】A1007. Maximum Subsequence Sum(最大子序列问题)
@(PAT)
链接:https://www.patest.cn/contests/pat-a-practise/1007
思路:
这道题目是著名的最大子序列问题,和Leetcode的一道题目几乎一样,本博客已总结过:
http://blog.csdn.net/timso1997/article/details/79123037
大概有3种解法。
My AC code:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int k;
vector<int> nums;
scanf("%d", &k);
bool if_all_negetive= true;
for (int i= 0; i< k; i++) {
int temp;
scanf("%d", &temp);
if (temp>= 0) if_all_negetive= false;
nums.push_back(temp);
}
if (if_all_negetive) {
printf("%d %d %d", 0, nums[0], nums[k- 1]);
return 0;
}
int begin= 0, end= 0, max= -1;
for (int i= 0; i< k; i++) {
int sum= 0;
for (int j= i; j< k; j++) {
sum+= nums[j];
if (sum> max) {
begin= i;
end= j;
max= sum;
}
}
}
printf("%d %d %d", max, nums[begin], nums[end]);
}
一开始max我设置为0,有一个点过不了,那个点估计就是和为0的情况了,后来改为-1就过了,还是得注意细节….