3174: [Tjoi2013]解救小矮人

Time Limit: 1 Sec  Memory Limit: 128 MB

Submit: 573  Solved: 293

[Submit][Status][

id=3174" style="color:blue; text-decoration:none">Discuss]

Description

一群小矮人掉进了一个非常深的陷阱里,因为太矮爬不上来,于是他们决定搭一个人梯。即:一个小矮人站在还有一小矮人的 肩膀上。知道最顶端的小矮人伸直胳膊能够碰到陷阱口。

对于每个小矮人,我们知道他从脚到肩膀的高度Ai,而且他的胳膊长度为Bi。陷阱深度为H。假设我 们利用矮人1,矮人2。矮人3,。。

。矮人k搭一个梯子,满足A1+A2+A3+....+Ak+Bk>=H,那么矮人k就能够离开陷阱逃跑了,一
旦一个矮人逃跑了,他就不能再搭人梯了。

我们希望尽可能多的小矮人逃跑, 问最多能够使多少个小矮人逃跑。

Input

第一行一个整数N, 表示矮人的个数。接下来N行每一行两个整数Ai和Bi,最后一行是H。(Ai。Bi,H<=10^5)

Output

一个整数表示对多能够逃跑多少小矮人

Sample Input

例子1



2

20 10

5 5

30



例子2

2

20 10

5 5

35

Sample Output

例子1

2



例子2

1

HINT

数据范围



30%的数据 N<=200



100%的数据 N<=2000

贪心+DP

感性地理解一下。a[i]+b[i]较大的小矮人逃跑的能力更强。所以我们要先让a[i]+b[i]小的人尽可能先逃跑。

于是能够想到按a[i]+b[i]从小到大排序,然后贪心计算。但这个贪心显然是有问题的。所以我们考虑用DP解决贪心的不足。

贪心的不足之处在于当前的小矮人的a[i]还会对后面的小矮人产生影响。所以我们能够令f[i]表示逃跑了i个小矮人剩余a[i]和的最大值。

在更新f数组的同一时候也就计算出了答案。

注意:f数组要逆向更新。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 2005
using namespace std;
int n,h,ans,f[maxn];
struct data{int x,y;}a[maxn];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
inline bool cmp(data a,data b)
{
return a.x+a.y<b.x+b.y;
}
int main()
{
n=read();
memset(f,-1,sizeof(f));
f[0]=0;
F(i,1,n) a[i].x=read(),a[i].y=read(),f[0]+=a[i].x;
h=read();
sort(a+1,a+n+1,cmp);
F(i,1,n)
{
D(j,ans,0) if (f[j]+a[i].y>=h) f[j+1]=max(f[j+1],f[j]-a[i].x);
if (f[ans+1]>=0) ans++;
}
printf("%d\n",ans);
return 0;
}

bzoj3174【TJOI2013】解救小矮人的更多相关文章

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

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

  2. bzoj3174 [Tjoi2013]拯救小矮人

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

  3. BZOJ3174:[TJOI2013]拯救小矮人(DP)

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

  4. BZOJ3174. [TJOI2013]拯救小矮人(dp)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3174 题解 其实此题并不需要那么多YY的部分. 我们考虑若干个小矮人逃出的顺序.若跳出的 ...

  5. BZOJ3174 TJOI2013 拯救小矮人 贪心、DP

    传送门 原问题等价于:先给\(n\)个人排好顺序.叠在一起,然后从顶往底能走即走,问最多能走多少人 注意到一个问题:如果存在两个人\(i,j\)满足\(a_i + b_i < a_j + b_j ...

  6. bzoj千题计划208:bzoj3174: [Tjoi2013]拯救小矮人

    http://www.lydsy.com/JudgeOnline/problem.php?id=3174 按a+b从小到大排序,a+b小的在上面,先考虑让它逃出去 正确性不会证 感性理解一下,最后一个 ...

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

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

  8. 【BZOJ-3174】拯救小矮人 贪心 + DP

    3174: [Tjoi2013]拯救小矮人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 686  Solved: 357[Submit][Status ...

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

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

随机推荐

  1. SpringBoot日志管理

    一.简介 小张:开发一个大型系统:1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件?2.框架来记录系统的一些运行时信息:日志框架 : z ...

  2. extjs combo中给Store插入一条数据

    { xtype: 'combo', columnWidth: .55, name: 'AQLLevel', store: Ext.create('Scripts.Code.Common.store.I ...

  3. redis 安装并且设置开机后台自动启动(转)

      1,安装redis wget http://download.redis.io/releases/redis-2.8.8.tar.gz .tar.gz cd redis- make 2,建立Red ...

  4. php程序无法使用localhost连接数据库解决方法(linux)

    php程序无法使用localhost连接数据库解决方法(linux) 出现这种情况是因为PHP无法正确获取mysql.sock 在php.ini文件中指定即可解决问题. 修改如下: 找到 mysql. ...

  5. linux之rpm指令

    rmp原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎.逐渐受到其他发行版的采用.RPM套件管理方式的出现,让Linux易于 ...

  6. 一篇文章让你彻底弄懂WinForm GDI 编程基本原理

    一 GDI编程原理 GDI(Graphics Device Interface,图形设备接口),主要负责Windows系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出. GDI的常用 ...

  7. easyUI样式之easyui-switchbutton

    HTML文件 <tr> <th>是否发送短信:</th> <td> <input id="sendTxt" name=&quo ...

  8. 1019(C++)

    计算n个数的最小公倍数,可用欧几里得算法计算两个数字的最大公约数,再计算两个数最小公倍数 有了2个数最小公倍数算法就简单了,即为:计算第一和第二个数得到最小公倍数lc,再计算lc和第三个数最小公倍数. ...

  9. My97DatePicker控件显示时分秒

    方式一: if (!WebCalendar.timeShow) WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/; else ...

  10. 通过脚本发送zabbix微信报警

    实现zabbix通过微信报警的方式也是通过脚本来实现,与邮件报警不同的是,脚本调用的微信的相关接口的获取相对复杂一点 1.申请一个微信公众号(企业号) 申请方法不多说,如果已申请请忽略 2.在微信企业 ...