bzoj 1233: [Usaco2009Open]干草堆tower 【想法题】
首先这题的$n^3$的DP是比较好想的
$f[i][j]$表示用前$i$包干草 且最顶层为第$j+1$包到第$i$包 所能达到的最大高度
然而数据范围还是太大了 因此我们需要去想一想有没有什么单调性
----------------------------------------------------------------------------------------------------
从其他人的题解中 可以看到一个结论 我们尽量使底层最短 便可逐渐达到最优解
然后再结合递推的思想去做 我们就会使在底层最短的基础上使第二层最短 以此类推……
然而根据这个结论 我还是没有什么明确的实现思路 不过忽然想到了这样一组数据
3
2 1 4
我们会发现 仅用前两包 可以达到2的高度 然而加上第3包后 反而只能达到1的高度了
可是如果倒着推的话 情况就大不一样了 因为多的部分直接堆在底层就好了
所以倒着推所得到的答案是单调的
这样的话 我们又可以用 $f[i]$记录以$i$到$n$包做草堆 底层的最小长度 $g[i]$记录此时能达到的最大高度
这样就优化到$n^2$了
----------------------------------------------------------------------------------------------------
接下来 我们再观察一下递推式
$f[i]=min(sum[j-1]-sum[i-1])$,$(j>i,f[j]<=sum[j-1]-sum[i-1])$
显然$f[i]$从较小的j转移过来结果会更优(如果符合转移条件的话) $(*)$
而对于转移条件 $f[j]<=sum[j-1]-sum[i-1]$ 我们把式子移项得到 $sum[i-1]<=sum[j-1]-f[j]$
这样的话 对于决策j 显然$sum[j-1]-f[j]$越大 可以作为决策的情况就越多 而根据$(*)$ 我们知道j越小越好
因此如果存在决策$k>j$ 满足 $sum[k-i]-f[k]>=sum[j-1]-f[j]$ 那么决策k便一定不能用上
于是这个问题就转变为了用单调队列来维护单调性DP的经典模型了
----------------------------------------------------------------------------------------------------
具体实现可参考代码(然而如果把上面的内容认真读了还不会自己实现的话……)
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define rep(i,n) for(int i=1;i<=n;++i)
#define imax(x,y) (x>y?x:y)
#define imin(x,y) (x<y?x:y)
using namespace std;
const int N=;
int sum[N],f[N],g[N],q[N];
int n;
int main()
{
scanf("%d",&n);
rep(i,n)
{
scanf("%d",&sum[i]);
sum[i]+=sum[i-];
}
int ifront=,itail=;
q[]=n+;
for(int i=n;i;--i)
{
while(ifront<itail&&sum[q[ifront+]-]-sum[i-]>=f[q[ifront+]])
++ifront;
f[i]=sum[q[ifront]-]-sum[i-];
g[i]=g[q[ifront]]+;
while(ifront<=itail&&sum[q[itail]-]-f[q[itail]]<=sum[i-]-f[i])--itail;
q[++itail]=i;
}
printf("%d",g[]);
return ;
}
bzoj 1233: [Usaco2009Open]干草堆tower 【想法题】的更多相关文章
- bzoj 1233: [Usaco2009Open]干草堆tower
1233: [Usaco2009Open]干草堆tower Description 奶牛们讨厌黑暗. 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡 .一共有N大包的 ...
- ●BZOJ 1233 [Usaco2009Open] 干草堆 tower
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1233 留坑.以后再来看看. (绝望,无奈,丧心...) (这个题的证明真的很诡异啊,看得我稀 ...
- bzoj 1233: [Usaco2009Open]干草堆tower【dp+单调栈】
参考:https://www.cnblogs.com/N-C-Derek/archive/2012/07/11/usaco_09_open_tower.html 虽然长得很像斜率优化,但是应该不算-- ...
- 1233: [Usaco2009Open]干草堆tower
传送门 感觉正着做不太好搞,考虑倒过来搞 容易想到贪心,每一层都贪心地选最小的宽度,然后发现 $WA$ 了... 因为一开始多选一点有时可以让下一层宽度更小 然后有一个神奇的结论,最高的方案一定有一种 ...
- 【BZOJ 1233】 [Usaco2009Open]干草堆tower (单调队列优化DP)
1233: [Usaco2009Open]干草堆tower Description 奶牛们讨厌黑暗. 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡 .一共有N大包的 ...
- bzoj1233[Usaco2009Open]干草堆tower 单调队列优化dp
1233: [Usaco2009Open]干草堆tower Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 983 Solved: 464[Submi ...
- bzoj1233 [Usaco2009Open]干草堆tower 【单调队列dp】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1233 单调队列优化的第一题,搞了好久啊,跟一开始入手斜率优化时感觉差不多... 这一题想通了 ...
- bzoj1233: [Usaco2009Open]干草堆tower
Description 奶牛们讨厌黑暗. 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡 .一共有N大包的干草(1<=N<=100000)(从1到N编号) ...
- 【BZOJ 1233】 干草堆
[题目链接] 点击打开链接 [算法] 这题有一个性质 : 位于顶层的干草堆可以满足宽度最小且高度最高 根据这个性质,用单调队列优化DP,即可 [代码] #include<bits/stdc++. ...
随机推荐
- Selenium+Java环境搭建
1. 安装JDK URL:http://www.oracle.com/technetwork/java/javase/downloads/ 2. 配置环境变量 JAVA_HOME = E:\Java\ ...
- spring容器的启动过程
spring的启动过程: 首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环 ...
- Emmet-前端开发神器
地址:https://segmentfault.com/a/1190000007812543 Emmet是一款编辑器插件,支持多种编辑器支持.在前端开发中,Emmet 使用缩写语法快速编写 HTML. ...
- python 列表总结大全
1定义 names=[] names=[1,2,1,1,1,] names=[1.'10'.[1,1]] 2添加元素 names.append() names.insert(0,10) names.e ...
- P4126 [AHOI2009]最小割(网络流+tarjan)
P4126 [AHOI2009]最小割 边$(x,y)$是可行流的条件: 1.满流:2.残量网络中$x,y$不连通 边$(x,y)$是必须流的条件: 1.满流:2.残量网络中$x,S$与$y,T$分别 ...
- 2018-2-13-C#-搜索算法
title author date CreateTime categories C# 搜索算法 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23:3 +0 ...
- 让docker容器使用主机系统时间(挂入/etc/localtime)
-v挂入这个文件就可以了: -v /etc/localtime:/etc/localtime:ro
- 在CNN上增加一层CAM告诉你CNN到底关注什么
Cam(Class Activation Mapping)是一个很有意思的算法,他能够将神经网络到底在关注什么可视化的表现出来.但同时它的实现却又如此简介,相比NIN,googLenet这些使用GAP ...
- HTML知识梳理(笔记)
HTML常见元素 meta 定义和用法<meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. <meta> 标 ...
- BZOJ5261 Rhyme
传送门 广义后缀自动机= =+ 跟ptx大爷的博客学的 戳我传送 我写的第一种 建立Trie树的写法 bfs建立SAM 为什么是bfs呢 我也不知道(GG) 经过我一番抱大腿+询问 各位大爷说的原因是 ...