题目

\(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]拯救小矮人的更多相关文章

  1. [luogu] P4823 [TJOI2013]拯救小矮人(贪心)

    P4823 [TJOI2013]拯救小矮人 题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以 ...

  2. [洛谷P4823] TJOI2013 拯救小矮人

    问题描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口. 对于每一个小矮人,我们知道他从 ...

  3. 贪心+DP【洛谷P4823】 [TJOI2013]拯救小矮人

    P4823 [TJOI2013]拯救小矮人 题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以 ...

  4. BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP

    BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀 ...

  5. 【BZOJ3174】[TJOI2013]拯救小矮人(贪心,动态规划)

    [BZOJ3174][TJOI2013]拯救小矮人(贪心,动态规划) 题面 BZOJ 洛谷 题解 我们定义一个小矮人的\(A_i+B_i\)为它的逃跑能力. 我们发现,如果有两个小矮人\(x,y\), ...

  6. BZOJ3174 Tjoi2013 拯救小矮人(贪心+DP)

    传送门 Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个 ...

  7. bzoj3174 [Tjoi2013]拯救小矮人

    Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...

  8. bzoj 3174: [Tjoi2013]拯救小矮人

    Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...

  9. [TJOI2013]拯救小矮人[排序+dp]

    题意 题目链接 分析 Imagine的完美回答 重点大概是证明我们选出要救的小矮人一定可以根据 \(a_i+b_i\) 的大小进行排序救出. 注意这里关注的对象是可以保留的高度,所以我们的dp值才会表 ...

随机推荐

  1. getch和getchar的区别

    造冰箱的大熊猫@cnblogs 2018/11/30 1.getc() 头文件:stdio.h 函数声明:int getc ( FILE * stream ); 功能: - 返回流(stream)当前 ...

  2. Scratch的入门笔记

    最近发现人工智能和编程在小学开始普及,由于好奇,所以开始去了解儿童编程方面的知识,希望增加一些儿童编程教育相关的知识面,跟上发展潮流. Scratch是一款由麻省理工学院的“终身幼儿园团队”(Life ...

  3. python中oepen及fileobject初步整理之划水篇

    open选项 参考官方文档,很多东西也没有看懂,将自己理解的部分先整理到这里,以后还是要参阅官方文档的. open (file, mode='r', buffering=-1, encoding=No ...

  4. Springboot 解决跨域请求

    Cors处理 跨域请求 细粒度 直接在controller层上 添加@CrossOrigin注解 @PostMapping("/") @CrossOrigin(value = &q ...

  5. 【BZOJ4456】 [Zjoi2016]旅行者 / 【UOJ #184】 【ZJOI2016】旅行者

    Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北 的道路,这些道路两两相交形成n×m个路口 (i,j)(1≤i≤n,1≤j ...

  6. sh_07_元组遍历

    sh_07_元组遍历 info_tuple = ("zhangsan", 18, 1.75) # 使用迭代遍历元组 for my_info in info_tuple: # 使用格 ...

  7. Fastdfs 单机安装 教程

    分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群 详细的最新版fastdfs单机版搭建 分布式文件系统 - FastDFS 在64位CentOS 下配置安装部署

  8. [LOJ2538][PKUWC2018]Slay the Spire:DP

    分析 学会新姿势!我们可以通过调整DP顺序来体现选取物品的优先顺序! 显然选取强化牌的最优策略是倍数从高到低,能选就选,最多选\(k-1\)张,选取攻击牌的最优策略是伤害从高到低,尽量少选,但最少选\ ...

  9. Spring boot之配置server信息

    知识点: 1.修改端口号 2.修改context-path 3.其它配置说明 配置端口号: Spring boot 默认端口是8080, 如果想要进行更改的话, 只需要修改applicatoin.pr ...

  10. MySort(选做)的实现

    MySort(选做)的实现 题目内容 注意:研究sort的其他功能,要能改的动代码,需要答辩 模拟实现Linux下Sort -t : -k 2的功能. 要有伪代码,产品代码,测试代码(注意测试用例的设 ...