CDOJ 1357 柱爷与最大区间和(dp+滚动数组)
来源:互联网 发布:数据库系统概念电子书 编辑:程序博客网 时间:2024/06/05 22:46
题解,这是一个求两个不相邻子区间最大和的问题,我们很容易想到1个区间最大和怎么求,dp[i]=max(dp[i-1],0)+v[i],而这是两个区间,而且是不相邻的,可以得到以下dp公式
dp[i][j]=max(dp[i-1][j-2],dp[i][j-1])+v[j].根据数据范围,开一个二维数组肯定是会MLE的,因此应该用两个一维数组滚动存储
代码如下:
#include <iostream>#include <bits/stdc++.h>using namespace std;int d[500005];int p[500005];int v[500005];int main(){ int n; cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&v[i]); } int mx[3]; mx[1]=-1000000000; mx[2]=-1000000000; for(int i=0;i<2;i++) { mx[2]=-1000000000; mx[1]=0; int j; fill(d,d+n+1,-100000000); for(j=2*i+1;j<=n;j++) { d[j]=max(p[j-2],d[j-1])+v[j]; //cout<<j<<' '<<p[j-2]<<' '<<d[j-1]<<endl; p[j-2]=mx[1]; mx[1]=mx[2]; mx[2]=max(d[j],mx[2]); //cout<<j<<' '<<p[j-2]<<' '<<d[j]<<endl; } p[j-1]=mx[2]; p[j-2]=mx[1]; } cout <<mx[2]<< endl; return 0;}
0 0
- CDOJ 1357 柱爷与最大区间和(dp+滚动数组)
- cdoj柱爷与最大区间和
- 【cdoj 1357】柱爷与最大区间和
- 【CDOJ 1357】柱爷与最大区间和
- CDOJ-2016-B-柱爷与最大区间和
- CDOJ 1321柱爷的恋爱 (区间dp)
- poj 1141(区间dp 滚动数组)
- cdoj 1131 区间dp
- 区间dp+ 滚动数组uva1632
- CDOJ1357--柱爷与最大区间和
- 【USACO3.3.5】游戏(区间dp的滚动数组与编码问题)
- (CDOJ 844 线段树区间最大连续和 )<线段树的各种姿势>
- CDOJ 844 线段树区间最大连续和
- DP与滚动数组
- 【cdoj 1321】柱爷的恋爱 区间dp记忆化搜索
- CDOJ 1355 柱爷与三叉戟不得不说的故事(枚举子集状压dp)
- 数字和最大(读入外挂模板+DP或滚动数组)
- 最大子数组(最大连续区间和)问题
- 软件测试概念(二)
- Java自定义线程池和线程总数控制
- 【Linux】rpm常用命令及rpm参数介绍
- jacob操作office word简单教程
- struts2.0中struts.xml配置文件详解
- CDOJ 1357 柱爷与最大区间和(dp+滚动数组)
- RMI学习案例
- Spring拦截器
- Java基础复习(二)-----final和static关键字
- svn: Failed to add directory '../target': an unversioned directory of the same name already exis
- php学习之三(条件语句,数组)
- HTML图片标记
- QT UDP通讯
- TCP的三次握手(建立连接)和四次挥手(关闭连接)