问题描述:

  若有干个干草, 分别有各自的宽度, 要求将它们按顺序摆放, 并且每层的宽度不大于 它的下面一层 ,  求最多叠几层

题解:    

    zkw神牛证明了: 底边最短, 层数最高         证明:传送门

    接下来我们就可以根据这个结论进行dp。 前缀和sum, 以及 F[ i ]第 i 个数之后的干草叠起来后, 底层的最短宽度, 以及 H[ i ] 表示 第i个后的干草堆最高叠几层

    有转移方程 : F[ i ] = min( sum[ j - 1] - sum[i - 1] ) ( j > i && sum[ j - 1] - sum[ i - 1] >= f[ j ] )  由于前缀和从前往后是递增的, 所以 j 越小越好。

    又因为要满足 sum[ j - 1] - f[ j ] >= sum[ i - 1 ] , 所以 sum[ j - 1] - f[ j ] 越大越好, 可以用单调队列来使决策具有单调性, 每次取出队首就是最优决策

    

代码

  

 #include<cstring>
#include<cstdio>
#include<algorithm>
#define rd read()
#define rep(i,a,b) for( int i = (a); i <= (b); ++i )
#define per(i,a,b) for( int i = (a); i >= (b); --i )
using namespace std; const int N = 1e5 + 1e4; int n, a[N], sum[N], f[N], h[N], q[N]; int read() {
int X = , p = ; char c = getchar();
for(; c > '' || c < ''; c = getchar() ) if( c == '-' ) p = -;
for(; c >= '' && c <= ''; c = getchar() ) X = X * + c - '';
return X * p;
} int main()
{
n = rd;
rep( i, , n ) sum[i] = sum[i - ] + rd;
int l = , r = ;
q[r] = n + ;
sum[n + ] = sum[n];
per( i, n, ) {
while( l < r && f[ q[l + ] ] <= sum[ q[l + ] - ] - sum[i - ] ) l++;
f[i] = sum[ q[l] - ] - sum[i - ];
h[i] = h[q[l]] + ;
while( l < r && sum[q[r] - ] - f[q[r]] <= sum[i - ] - f[i] ) r--;
q[++r] = i;
}
printf("%d\n",h[]);
}

BZOJ1233 干草堆 - 单调队列优化DP的更多相关文章

  1. BZOJ 1233 干草堆 (单调队列优化DP)

    $ BZOJ~1233~~ $ 干草堆: (题目特殊性质) $ solution: $ 很妙的一道题目,开始看了一眼觉得是个傻逼贪心,从后往前当前层能多短就多短,尽量节省花费.但是这是DP专题,怎么会 ...

  2. 单调队列优化DP,多重背包

    单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...

  3. bzoj1855: [Scoi2010]股票交易--单调队列优化DP

    单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...

  4. hdu3401:单调队列优化dp

    第一个单调队列优化dp 写了半天,最后初始化搞错了还一直wa.. 题目大意: 炒股,总共 t 天,每天可以买入na[i]股,卖出nb[i]股,价钱分别为pa[i]和pb[i],最大同时拥有p股 且一次 ...

  5. Parade(单调队列优化dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others)    ...

  6. BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP

    BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP Description 有一排n棵树,第i棵树的高度是Di. MHY要从第一棵树到第n棵树去找他的妹子玩. 如果MHY在 ...

  7. 【单调队列优化dp】 分组

    [单调队列优化dp] 分组 >>>>题目 [题目] 给定一行n个非负整数,现在你可以选择其中若干个数,但不能有连续k个数被选择.你的任务是使得选出的数字的和最大 [输入格式] ...

  8. [小明打联盟][斜率/单调队列 优化dp][背包]

    链接:https://ac.nowcoder.com/acm/problem/14553来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时 ...

  9. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

随机推荐

  1. yii添加验证码 和重复密码

    <?phpnamespace frontend\models; use common\models\User;use yii\base\Model;use Yii; /** * Signup f ...

  2. svn转git合并代码

    在Git Bash 中输入 git-svn clone http://devsvnread.uuzuonline.net/GOT_PRIVATE/server/ --no-metadata -T tr ...

  3. js-for (var in )遍历顺序乱了

    存放的key 为如下: “01”,“02”,“03”,········“10”,“11”,“12” 遍历之后“10”,“11”,“12”, “01”,“02”,“03”,········ 解决办法:把 ...

  4. 02_数据库基础之(二)sql语句入门

    1.基本增删改查操作 #一. 数据类型 常用的3中 # .字符串 例如:你的名字 我是中国人 在数据库中要使用 ‘’引起来 '苹果手机' # .整数类型 例如: 你的年龄 ,办公室的人数 个 ,直接使 ...

  5. Android Studio SVN配置

    一 . 原文链接:忽略文件[转]    https://blog.csdn.net/buaaroid/article/details/51546521 1.用Android Studio创建一个项目, ...

  6. Spring-session redis 子域名 session

    Spring-session & redis 子域名共享session 例子: a.example.comb.example.comSpring 版本 4.2.6.RELEASE Spring ...

  7. Hudson 打包部署到Was上特别慢

    一.找问题点 1.打包很快,到部署很慢 2.部署到其他was一样很慢 二.解决 经过寻找,网上找出以下一段话: 问题出在web.xml,web.xml中的版本信息不对,要根据你的servlet版本和运 ...

  8. 关于 jenkins-cli.jar

    1.页面 jenkins-cli.jar 位置 首页-系统管理-Jenkins CLI 2.点击下载jenkins-cli.jar 或者 wget http://IP:8080/jenkins/jnl ...

  9. jasper打印实例2 ----通过文件字节流获得PDF格式图片

    public class IspReportUtil { public static String exportReportToByte(CommonReportHandler handler)thr ...

  10. vcenter或workstation12导入ovf出错:硬件系列vmx 14不受支持

    原因是因为导出ovf的虚拟机版本太高. 两个方法,一个强制,一个推荐. 强制 1. 打开ovf后缀文件,把<vssd:VirtualSystemType>vmx-14</vssd:V ...