C++假期旅行

假期旅行

题目描述
假期妈妈带小科去了一趟世界之窗,世界之窗中有N个分馆,每个分馆会展示一个国家标志性建筑以及国家的特色文化。

游览世界之窗的收费是这样的,世界之窗的大门是不用付门票费用的,但是游览每个分馆是需要付费的,游览一个分馆需要付两部分的费用,一部分是游览保险费b,另一部分是门票费w,也就是说游览一个会馆需要花费的钱数是b+w。另外假期世界之窗有一个优惠活动,就是可以减免一个分馆的门票费,但是保险费不变,也就是如果选择对一个分馆使用优惠就只需要支付保险费b即可。

小科当然想把所有的分馆都游览完,但是现实是骨感的,小科的妈妈只给了他M元钱,那小科如何选择才能游览尽量多的分馆呢?

输入格式
第一行,两个整数N和M,分别表示分馆的个数以及小科妈妈给他的总钱数。N≤1000,M≤10^9

接下来N行,每行两个整数bi wi分别表示每个分馆的保险费和门票费,其中每个整数都是≤10^9

输出格式
输出一行,一个整数,表示小科能够游览的最多的分馆的数量

输入输出样列
输入样例1:
5 1000
120 150
160 240
140 100
320 0
180 210
输出样例1:
4
说明
小科选择的馆是,第1、2、3、4这4个馆,对第2个馆使用优惠券,费用总额是(120+150)+ 160 +(140+100)+ 320=990元

【耗时限制】1000ms 【内存限制】256MB

解题思路
【问题目标】在总钱数一定的情况下,尽量选择多的分馆进行游览。
【贪心选择】优先价格便宜的,一个分馆的总花费=bi+wi
首先先根据一个分馆的总花费(bi+wi)从小到大进行排序。
优惠券可以减少一个分馆的门票费,那么对哪个分馆使用优惠券呢?
由于优惠券只能对减少门票费,不能减少保险费,所以不能冒然的减少门票费高的,由于门票费高的保险费费也很高,所以先安排总价格排序,从小到大的枚举,计算出如果对第i个分馆使用优惠券能够购买的礼物的数量。循环找到数量的最大值
对一个分馆使用优惠券后这个分馆的总花费为x=bi,那么剩余的礼物花费是B-x
那么问题转化为,使用B-x的钱,尽量多的购买礼物,所以从剩余的礼物中,选择价格低的。

AC代码:

#include<bits/stdc++.h>
using 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值