poj2479 Maximum sum(动态规划)
来源:互联网 发布:python 键盘控制程序 编辑:程序博客网 时间:2024/06/05 03:38
题意:在一个序列中寻找两个连续子序列,并且他们的和最大。
思路:定义两个数组。第一个数组从前往后记录前i(1-i)个元素中最大连续子序列,第二个数组从后往前记录前i(i-n)个元素中最大子序列和。
代码如下:
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#define MAX 0x3f3f3f3fusing namespace std;int num[50005],dp[50005],dp1[50005];int main(){ int t,n,max1; scanf("%d",&t); while(t--) { max1=-MAX; memset(num,0,sizeof(num)); memset(dp,0,sizeof(dp)); memset(dp1,0,sizeof(dp1)); scanf("%d",&n); for(int i=1;i<=n;i++) { num[i]=-10005; } for(int i=1;i<=n;i++) { scanf("%d",&num[i]); } dp[1]=num[1]; for(int i=2;i<=n;i++) { dp[i]=max(num[i],dp[i-1]+num[i]); } for(int i=2;i<=n;i++) { dp[i]=max(dp[i],dp[i-1]); } dp1[n]=num[n]; for(int i=n-1;i>=1;i--) { dp1[i]=max(num[i],dp1[i+1]+num[i]); } for(int i=n-1;i>=1;i--) { dp1[i]=max(dp1[i],dp1[i+1]); } for(int i=1;i<=n-1;i++) { max1=max(max1,dp[i]+dp1[i+1]); } printf("%d\n",max1); } return 0;}
1 0
- 【POJ2479】Maximum sum(动态规划,DP)
- poj2479 Maximum sum(动态规划)
- 【动态规划(最大子序列和)】:poj2479,Maximum sum
- 【动态规划】poj2479 Maximum sum && poj2593 Max Sequence(求两段不相交字串的最大和)
- POJ2479 - Maximum sum (动规)
- poj2479——Maximum sum(dp)
- POJ2479 Maximum sum
- POJ2479 Maximum sum
- poj2479 - Maximum sum
- POJ2479 Maximum sum DP
- poj2479 Maximum sum
- poj2479 Maximum sum
- poj2479 Maximum sum
- POJ2479 Maximum sum
- poj2479 c++ : Maximum sum
- Poj2479-Maximum sum
- POJ2479&OpenJudge1481 Maximum sum
- POJ2479:Maximum sum
- Chapter 5 生产者消费者系列之传统实现
- 大数据开发利器:Hadoop(1)
- github push 时, 如何不用每次都输 用户名和密码?
- 手把手教你创建个人微信公众号
- Java:按值传递还是按引用传递详细解说
- poj2479 Maximum sum(动态规划)
- [模板]求最长公共子序列
- C了个++:03 - C++的字符串与 string 类
- windows学习笔记2进程
- 吴韦朋:一个“深漂”从零到百万的365天创业日记(连载5)
- hdu1272 并查集
- Reverse Nodes in k-Group,LeetCode
- 为什么full join 会报错?而right(left) join没问题?
- 快速集成 iMessage (上)