PAT (Advanced) 1007. Maximum Subsequence Sum (25)
2017-09-09 20:52
531 查看
原题:1007. Maximum Subsequence Sum (25)
解题思路:
1.设A
为对应的保存原始序列a
的以每个元素为结尾的子序列的和, 初始化时与a
相同, 同时设定一个len
记录每个子序列的长度。
2.由题设求最大子序列和,则将每个A[i](0 <= i < n)求出, 最后取最大值即可。
3.每个A[i]的求解,A[i]与A[i-1] 有如下关系:
A[i] = max(A[i], A[i-1] + a[i]);
简单用数学归纳法证明:
当 i = 0时, 即A[0] = a[0], 显然成立,
假设当 i = k - 1时 A[k-1] 为 以a[k-1]为结尾的最大连续子序列和成立,
则 以a[k]为结尾的的A[k]无非两种情况,即A[k] 与 A[k-1] + a[k] , 取其中的最大值即可。
4.注意len
的更新。
c++代码如下:
解题思路:
1.设A
为对应的保存原始序列a
的以每个元素为结尾的子序列的和, 初始化时与a
相同, 同时设定一个len
记录每个子序列的长度。
2.由题设求最大子序列和,则将每个A[i](0 <= i < n)求出, 最后取最大值即可。
3.每个A[i]的求解,A[i]与A[i-1] 有如下关系:
A[i] = max(A[i], A[i-1] + a[i]);
简单用数学归纳法证明:
当 i = 0时, 即A[0] = a[0], 显然成立,
假设当 i = k - 1时 A[k-1] 为 以a[k-1]为结尾的最大连续子序列和成立,
则 以a[k]为结尾的的A[k]无非两种情况,即A[k] 与 A[k-1] + a[k] , 取其中的最大值即可。
4.注意len
的更新。
c++代码如下:
#include<cstdio> #include<algorithm> using namespace std; const int maxn = 10010; int a[maxn], A[maxn], len[maxn]; //a[i]记录相应的元素值 //A[i]记录以a[i]结尾的最大子序列和 //len[i]记录相应的子序列长度 int main() { int n; while(scanf("%d", &n) != EOF) { for(int i = 0; i < n; i++) { scanf("%d", &a[i]); A[i] = a[i]; len[i] = 1; } for(int i = 1; i < n; i++) { if(A[i-1] + a[i] > A[i]) // 当前一序列加上当前元素的和比以当前元素为结尾的序列和大 { // 更新以当前元素为结尾的最大值 A[i] = A[i-1] + a[i]; len[i] = len[i] + len[i - 1]; //更新长度 } } int ansi, ans = -100000000;//ans要足够小 for(int i = 0; i < n; i++) { if(ans < A[i]) // 由题目输出条件 不可取等号 { ans = A[i]; ansi = i; } } if(ans < 0) // ans小于0特殊处理 printf("0 %d %d\n", a[0], a[n-1]); else printf("%d %d %d\n", ans, a[ansi - len[ansi] + 1], a[ansi]); } return 0; }
相关文章推荐
- PAT Advanced 1007. Maximum Subsequence Sum (25) (C语言实现)
- PAT (Advanced Level) Practise 1007. Maximum Subsequence Sum (25)
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
- 【PAT】【Advanced Level】1007. Maximum Subsequence Sum (25)
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) vector
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) 解题报告
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) 最大连续子数组,一次遍历,stack辅助
- 【PAT Advanced Level】1007. Maximum Subsequence Sum (25)
- PAT (Advanced Level) Practise - 1007. Maximum Subsequence Sum (25)
- PAT (Advanced Level) Practise 1007. Maximum Subsequence Sum (25)
- 【c++】PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)*
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) dp
- pat 1007. Maximum Subsequence Sum (25)
- PAT甲题题解-1007. Maximum Subsequence Sum (25)-求最大子区间和
- PAT-1007. Maximum Subsequence Sum (25)
- PAT 1007. Maximum Subsequence Sum (25)
- 浙大 PAT Advanced level 1007. Maximum Subsequence Sum
- pat PAT (Advanced Level) Practise 1007. Maximum Subsequence Sum (25)
- pat 1007. Maximum Subsequence Sum (25)
- PAT_A 1007. Maximum Subsequence Sum (25)