题目描述
Farmer John想给他的N(1≤N≤1000)头奶牛置办礼物,总的花费预算是B(1≤B≤1000000000).奶牛i需要的礼物的价格是Pi,但是运送费是Si,所以整个礼物的总花费是Pi+Si。
FJ有一个优惠券,他可以用这个优惠券以半价的价格购买其中一个礼物,如果FJ用这个优惠券给奶牛i购买礼物,那么他需要支付的钱是Pi/2+Si。所有的Pi都恰好是偶数。
请帮助FJ计算一下,他能够购买多少个奶牛的礼物。
输入格式
第一行,用空格隔开的两个整数N和B
接下来N行,每行两个整数,分别表示第i个奶牛的礼物的价格Pi和运送费Si(0≤Pi,Si≤1000000000,Pi是偶数)
输出格式
输出一个整数,表示FJ能够购买礼物的最大奶牛数量
输入输出样例
输入样例1:
5 24 4 2 2 0 8 1 6 3 12 5
输出样例1:
4
说明
样例说明:
FJ可以购买1到4这4个奶牛的礼物,优惠券用于购买第三个奶牛的礼物,总花费是(4+2)+(2+0)+(4+1)+(6+3)=22,当然他也可以用优惠券购买第一个或者第四个礼物,预算也是满足的。
【耗时限制】1000ms 【内存限制】128MB
//
//Created by Carlgood.
//
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<sstream>
using namespace std;
struct youallturnintobirdslotsandlotsofbirds
{
int p,s;
}a[1010];
bool cmp(const youallturnintobirdslotsandlotsofbirds &x,const youallturnintobirdslotsandlotsofbirds &y)
{
return x.p+x.s<y.p+y.s;
}
int main()
{
int n,m,ans=0;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i].p>>a[i].s;
}
sort(a+1,a+n+1,cmp);
int cnt=0,sum=0;
for(int i=1;i<=n;i++)
{
cnt=0;
sum=0;
sum=a[i].p/2+a[i].s;
if(sum>m) continue;
cnt++;
for(int 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;
}