poj 2479 Maximum sum 最大数字连续和
来源:互联网 发布:小米手机没有4g网络 编辑:程序博客网 时间:2024/05/16 11:05
昨天周赛,我被我的做法和代码给恶心到了,不仅做法麻烦易错,而且代码啰嗦的要命,本来很简单的问题,却被做成一副惨状。特意修改了代码。
解法:设R[i]为以a[i]结尾的最大连续子段和,L[i]为以a[i]开头的最大连续子段和。
很显然枚举x,答案就是L[x]+max{R[j]} (1<=j<x)。
其中max{R[j]}可以预处理,令dp[x-1]=max{L[j]} (1<=j<x)。
题目的要求:必须有两个子段。
L[x]+max{R[j]} (1<=j<x)一定满足有两子段
具体实现:
R[i]=max(R[i-1]+a[i],a[i]);
L[i]=max(L[i+1]+a[i],a[i]);
dp[i]=max(dp[i-1],R[i]);
#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;const int INF =0x3f3f3f3f;const int maxn=50000 ;int n,T;int a[maxn+5];int R[maxn+5],L[maxn+5];int dp[maxn+5];int main(){ scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } R[1]=a[1];//对边界情况做特殊处理 for(int i=2;i<=n;i++) { R[i]=max(R[i-1]+a[i],a[i]); } L[n]=a[n];//对边界情况做特殊处理 for(int i=n-1;i>=1;i--) { L[i]=max(L[i+1]+a[i],a[i]); } int ans=-INF;//此处要赋值为负无穷 dp[1]=a[1];//对边界情况做特殊处理 for(int i=2;i<=n;i++) { dp[i]=max(dp[i-1],R[i]); ans=max(ans, L[i]+dp[i-1] ); } printf("%d\n",ans); } return 0;}
0 0
- poj 2479 Maximum sum 最大数字连续和
- Poj 2479 Maximum sum【双向DP/最大连续和】
- POJ 2479 Maximum sum & POJ 2573 Max Sequence (DP,最大连续子串和)
- POJ 1050 To the Max && POJ 2479Maximum sum(DP最大连续子段和)
- poj 2479 Maximum sum 最大连续子串的变异
- poj 2479 Maximum sum(简单dp,最大连续和拓展)
- poj 2479 dp Maximum sum求两段连续不重叠子段的最大和
- poj-2479 Maximum sum 【最大字串和】
- UVA108 - Maximum Sum(最大连续和)
- ural 1146 Maximum Sum 最大连续和
- Maximum Subsequence Sum最大连续数列和
- POJ 2593 Max Sequence POJ 2479 Maximum sum (线性dp 最大连续两不重叠子段和)
- Maximum sum(poj 2479 最大m子段和)
- POJ 2479 Maximum sum (DP&双最大子段和)
- poj 2479 Maximum sum 两段不相交最大子段和
- poj 2479 Maximum sum (子序列和最大问题)
- poj 2479 Maximum sum(dp&最大子段和)
- POJ 2479 Maximum sum(2次最大字段和)
- TF-IDF及其算法
- 数据结构(19)--DAG应用之AOE网的拓扑排序
- 数组中重复的数字
- 镇江第一周
- python 中的%符号
- poj 2479 Maximum sum 最大数字连续和
- 【机器学习学习过程中的笔记1——Stochastic gradient descent 和 Batch gradient descent 】
- APPIUM+JAVA实现对安卓APK的自动化测试----第九篇【为什么】
- 视频播放器(AVPlayer)
- 珍藏文:60条有名的原则与定理
- 30还是个程序员
- IP协议学习总结
- C语言实现使用动态数组实现循环队列
- MATLAB仿真