poj 2479 Maximum sum && poj 2593 Max Sequence
来源:互联网 发布:echo linux 命令@echo 编辑:程序博客网 时间:2024/05/22 07:48
2479 题目链接:http://poj.org/problem?id=2479
2593 题目链接:http://poj.org/problem?id=2593
题目大意:求一个数列中两个不重叠子序列的最大和。
题目分析:求最大子段和:dp[i] = max(dp[i-1] + num[i], num[i])。这道题只需要正序和反序各求一次最大子段和,然后枚举断开的点,把序列分成左右两边,在两边找出各自的最大子段和,两个值相加后的最大值就是答案。
2479 代码参考:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 50000+9;const int inf = 1e9;int a[maxn], dp[maxn], l[maxn], r[maxn];int main(){ int t, n, i; scanf("%d", &t); while(t--) { memset(dp, 0, sizeof(dp)); scanf("%d", &n); dp[0] = dp[n+1] = l[0]= r[n+1] = -inf; for(i=1; i<=n; ++i)//正序求最大子段和 { scanf("%d", a+i); dp[i] = max(dp[i-1] + a[i], a[i]); l[i] = max(l[i-1], dp[i]);//构造左边的答案 } for(i=n; i>=1; --i)//逆序求最大子段和 { dp[i] = max(dp[i+1] + a[i], a[i]); r[i] = max(r[i+1], dp[i]);//构造右边的答案 } int ans = -inf; //枚举断开的点 for(i=1; i<n; ++i) ans = max(ans, l[i] + r[i+1]); printf("%d\n", ans); } return 0;}
2593 代码参考:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 100000+9;const int inf = 1e9;int a[maxn], dp[maxn], l[maxn], r[maxn];int main(){ int t, n, i; while(~scanf("%d", &n) && n) { memset(dp, 0, sizeof(dp)); dp[0] = dp[n+1] = l[0]= r[n+1] = -inf; for(i=1; i<=n; ++i)//正序求最大子段和 { scanf("%d", a+i); dp[i] = max(dp[i-1] + a[i], a[i]); l[i] = max(l[i-1], dp[i]);//构造左边的答案 } for(i=n; i>=1; --i)//逆序求最大子段和 { dp[i] = max(dp[i+1] + a[i], a[i]); r[i] = max(r[i+1], dp[i]);//构造右边的答案 } int ans = -inf; //枚举断开的点 for(i=1; i<n; ++i) ans = max(ans, l[i] + r[i+1]); printf("%d\n", ans); } return 0;}
- POJ 2479 Maximum sum (同POJ 2593 Max Sequence)
- poj 2479 Maximum sum poj 2593 Max Sequence
- poj 2479 Maximum sum && poj 2593 Max Sequence
- POJ 2479 Maximum sum POJ 2593 Max Sequence
- POJ 2479 Maximum sum && POJ 2593 Max Sequence
- POJ 2479 Maximum sum && 2593 Max Sequence (dp)买一送一
- POJ 2593 Max Sequence POJ 2479 Maximum sum (线性dp 最大连续两不重叠子段和)
- POJ 2479 Maximum sum & POJ 2573 Max Sequence (DP,最大连续子串和)
- POJ 2593&&2479:Max Sequence
- POJ 2593 Max Sequence
- poj 2593 max sequence
- POJ 2593 Max Sequence
- POJ 2593 Max Sequence
- poj 2479 max sum
- poj 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- HDU-1027-全排列
- HDU 2147kiki's game
- [leetcode] Interleaving String@DP
- FleaPHP和ThinkPHP的选择和比较
- 【黑马程序员】8. JavaScript
- poj 2479 Maximum sum && poj 2593 Max Sequence
- POJ 2488 A Knight's Journey
- android 之 handler
- SQL Server 索引结构及其使用
- emacs 快捷键操作
- MyEclipse Java Build Path详解
- ASP.NET中的控件——北大青鸟总结
- Android获取手机像素
- Puppet有条件的执行Exec