K12810 假期旅行

53 篇文章 0 订阅
11 篇文章 0 订阅

题目描述

假期妈妈带小科去了一趟世界之窗,世界之窗中有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

//
//Created by Carlgood.
//
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<sstream>
using namespace std;
struct youallturnintobirdslotsandlotsofbirds
{
	long long p,s;
}a[1010];
bool cmp(const youallturnintobirdslotsandlotsofbirds &x,const youallturnintobirdslotsandlotsofbirds &y)
{
	return x.p+x.s<y.p+y.s;
}
int main()
{
	long long ans=0,m,n;
	cin>>n>>m;
	for(long long i=1;i<=n;i++)
	{
		cin>>a[i].p>>a[i].s;
	}
	sort(a+1,a+n+1,cmp);
	long long cnt=0,sum=0;
	for(long long i=1;i<=n;i++)
	{
		cnt=0;
		sum=0;
		sum=a[i].p;
		if(sum>m) continue;
		cnt++;
		for(long long j=1;j<=n;j++)
		{
			if(j!=i)
			{
				sum+=a[j].p+a[j].s;
				if(sum>m) break;
				cnt++;
			}
		}
		ans=max(ans,cnt);
	}
	cout<<ans;
	return 0;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值