Luogu P4823 [TJOI2013]拯救小矮人
题目
\(n^2\)的dp已经成为辣鸡做法了,%%%wch。
首先一个结论:\(a+b\)小的人在上。
这个东西我们有三种方法解决证明:
1、感性理解,\(a+b\)越大的人逃生能力越强,放在下面就越可能溜。
2、交换法。
3、找别的博客。
所以我们排个序确定顺序,然后来考虑如何计算最多能跑多少人。
然后我们记录高度的后缀和\(s_i\),从上到下到第\(i\)个人时前面出不去的人的高度\(t\)。
如果第\(i\)个人能直接出去即\(t+s_i+b_i\),那么让他直接溜。
如果出不去,并且把溜出去了的最高的人拉下来能够让他出去,并且溜出去了的最高的人比这个人高,我们就把溜出去了的最高的人拉下来,让这个人出去。
否则这个人就走不了了。
对于第二个操作,开个堆维护就好了。
考虑第二个操作的正确性:这个操作不会影响当前出去的人数,并且垫底的高度\(t\)一定会增加,后面的人就一定更容易出去。
而所有拉更多人下来的举动都可以归纳到拉一个人下来中。
#include<bits/stdc++.h>
using namespace std;
const int N=2007;
int s[N];
priority_queue<int>q;
struct node{int a,b;}p[N];
int operator<(node a,node b){return a.a+a.b<b.a+b.b;}
int read(){int x;scanf("%d",&x);return x;}
int main()
{
int n=read(),i,h,t=0,ans=0;
for(i=1;i<=n;++i) p[i].a=read(),p[i].b=read();
sort(p+1,p+n+1),h=read();
for(i=n;i;--i) s[i]=s[i+1]+p[i].a;
for(i=1;i<=n;++i)
if(s[i]+p[i].b+t>=h) q.push(p[i].a),++ans;
else if(!q.empty()&&p[i].a<q.top()&&q.top()+s[i]+p[i].b+t>=h) t+=q.top(),q.pop(),q.push(p[i].a);
else t+=p[i].a;
return !printf("%d",ans);
}
Luogu P4823 [TJOI2013]拯救小矮人的更多相关文章
- [luogu] P4823 [TJOI2013]拯救小矮人(贪心)
P4823 [TJOI2013]拯救小矮人 题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以 ...
- [洛谷P4823] TJOI2013 拯救小矮人
问题描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口. 对于每一个小矮人,我们知道他从 ...
- 贪心+DP【洛谷P4823】 [TJOI2013]拯救小矮人
P4823 [TJOI2013]拯救小矮人 题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以 ...
- BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP
BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀 ...
- 【BZOJ3174】[TJOI2013]拯救小矮人(贪心,动态规划)
[BZOJ3174][TJOI2013]拯救小矮人(贪心,动态规划) 题面 BZOJ 洛谷 题解 我们定义一个小矮人的\(A_i+B_i\)为它的逃跑能力. 我们发现,如果有两个小矮人\(x,y\), ...
- BZOJ3174 Tjoi2013 拯救小矮人(贪心+DP)
传送门 Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个 ...
- bzoj3174 [Tjoi2013]拯救小矮人
Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...
- bzoj 3174: [Tjoi2013]拯救小矮人
Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...
- [TJOI2013]拯救小矮人[排序+dp]
题意 题目链接 分析 Imagine的完美回答 重点大概是证明我们选出要救的小矮人一定可以根据 \(a_i+b_i\) 的大小进行排序救出. 注意这里关注的对象是可以保留的高度,所以我们的dp值才会表 ...
随机推荐
- CF873F Forbidden Indices 后缀自动机+水题
刷刷水~ Code: #include <cstdio> #include <cstring> #include <algorithm> #define N 200 ...
- #5 DIV2 A POJ 3321 Apple Tree 摘苹果 构建线段树
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25232 Accepted: 7503 Descr ...
- 【WC2016】论战捆竹竿
已经快三周了啊--终于把挖的坑填了-- 首先显然是把除了自身的所有border拿出来,即做 \(\left\{ n - b_1, n - b_2, \dots, n - b_k, n \right\} ...
- [Jenkins]Job中如何传递自定义变量
场景一: Job构建步骤间的变量传递 Jenkins提供了数十种构建方式,我们以最常用的『Execute shell』为例.有时为了使Job中的复杂的构建流程更加清晰我们配置多个构建步骤像下面这样.图 ...
- 13.Python字符串详解(包含长字符串和原始字符串)
简单地理解,字符串就是“一串字符”,也就是用引号包裹的任何数据,比如“Hello,Charlie”是一个字符串,“12345”也是一个字符串. Python 要求,字符串必须使用引号括起来,可以使用单 ...
- linux pwd指令的C实现
linux pwd指令的C实现 pwd指令的功能介绍 linux pwd命令用于显示工作目录 执行pwd命令可立刻得知当前所在工作目录的绝对路径名称. 示例: 查询系统手册 如图所示,getcwd的描 ...
- leetcode-easy-math-204 Count Primes-NO
mycode time limited class Solution(object): def countPrimes(self, n): """ :type n ...
- Switch 开关
表示两种相互对立的状态间的切换,多用于触发「开/关」. 基本用法 绑定v-model到一个Boolean类型的变量.可以使用active-color属性与inactive-color属性来设置开关的背 ...
- 第八章 SpringCloud之Feign、Hystrix结合使用
#这个章节主要是针对Hystrix的使用,因为Feign的章节在上一节已经实现了,整个代码也是在上一个章节的基础上修改的 ##################Hystrix一个简单Demo实现#### ...
- Linux下搭建Git服务器
1.安装Git 见 Jenkins持续集成环境部署 第四节 2.创建Git用户和用户组 groupadd git useradd git -g git 3.创建证书切换到git用户创建证书 su gi ...