poj 2479 Maximum sum 两段不相交最大子段和
来源:互联网 发布:ruby精粹专家编程 pdf 编辑:程序博客网 时间:2024/04/30 10:16
Maximum sum
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 31315 Accepted: 9595
Description
Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below:Your task is to calculate d(A).
Input
The input consists of T(<=30) test cases. The number of test cases (T) is given in the first line of the input.
Each test case contains two lines. The first line is an integer n(2<=n<=50000). The second line contains n integers: a1, a2, ..., an. (|ai| <= 10000).There is an empty line after each case.
Each test case contains two lines. The first line is an integer n(2<=n<=50000). The second line contains n integers: a1, a2, ..., an. (|ai| <= 10000).There is an empty line after each case.
Output
Print exactly one line for each test case. The line should contain the integer d(A).
Sample Input
1101 -1 2 2 3 -3 4 -4 5 -5
Sample Output
13
Hint
In the sample, we choose {2,2,3,-3,4} and {5}, then we can get the answer.
Huge input,scanf is recommended.
Huge input,scanf is recommended.
Source
POJ Contest,Author:Mathematica@ZSU
[Submit] [Go Back] [Status] [Discuss]
题意很简单,分别从左和从右求最大子段和 然后枚举中间点即可 之和就是最大sum
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;const int INF=1e9;int a[55555];int dp[55555];int L[55555],R[55555];int solve(int a[],int n){ int i; dp[0]=-INF; for(i=1;i<=n;i++) dp[i]=max(dp[i-1]+a[i],a[i]); L[0]=-INF; for(i=1;i<=n;i++) L[i]=max(dp[i],L[i-1]); dp[n+1]=-INF; for(i=n;i>=1;i--) dp[i]=max(dp[i+1]+a[i],a[i]); R[n+1]=-INF; for(i=n;i>=1;i--) R[i]=max(dp[i],R[i+1]); int ans=-INF; for(i=1;i<=n;i++) ans=max(ans,L[i]+R[i+1]); return ans;}int main(){ int t; cin>>t; while(t--) { int n; int i; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); printf("%d\n",solve(a,n)); } return 0;}
- poj 2479 Maximum sum 两段不相交最大子段和
- Maximum sum(poj 2479 最大m子段和)
- POJ 2479 Maximum sum (DP&双最大子段和)
- poj 2479 Maximum sum(dp&最大子段和)
- POJ 1050 To the Max && POJ 2479Maximum sum(DP最大连续子段和)
- poj 2479 Maximum sum(求最大子段和的延伸)
- poj 2479 Maximum sum(求最大子段和的延伸)
- poj 2479 dp Maximum sum求两段连续不重叠子段的最大和
- Maximum sum 二维最大子段和
- POJ 2593 Max Sequence POJ 2479 Maximum sum (线性dp 最大连续两不重叠子段和)
- poj 2479 Maximum sum (子序列和最大问题)
- poj 2479 Maximum sum(最大m子段,滚动数组,优化)
- POJ 2479 动态规划 最大子序列问题(两段) Maximum sum
- POJ 2479 Maximum sum(动态规划、多段最大子序列求和)
- 最大子段和问题(Maximum Interval Sum)
- pat(A) 1007. Maximum Subsequence Sum(和最大子段)
- poj2479 Maximum sum(最大子段和变形)
- 最大子段和问题(Maximum Interval Sum)
- C++Vector用法
- 关于重力感应的一个小例子
- WMS-存储过程调用示例
- 五个同学的平均成绩
- NBUT 1513 Treasures【tarjan缩点+记忆化搜索】
- poj 2479 Maximum sum 两段不相交最大子段和
- [举重若轻]html5 history api实现单页面结构
- 数组大折腾
- ubuntu 创建桌面快捷方式
- windows mobile 6.5 输入法的切换
- 可变参数列表通过宏来实现(头文件stdarg.h)
- 专门针对初学者的Node.js教程
- 新人报名~~~~
- android蓝牙通信