农夫约翰想给他的 头奶牛购买礼物,但是他的预算只有
元。
奶牛 希望获得的礼物的价格为
,运输成本为
,也就是说约翰要帮奶牛
买礼物,共需花费
元钱。
约翰有一张特殊的优惠券,如果使用该优惠券来订购一份礼物,那么该礼物的价格会变为只有正常价格的一半。
如果约翰用该优惠券给奶牛 买礼物,那么他只需要支付
元钱。
请帮助约翰确定他最多可以给多少头奶牛购买礼物。
输入格式
第一行包含两个整数 和
。
接下来 行,每行包含两个整数
和
。
输出格式
输出约翰可以购买礼物的奶牛最大数量。
数据范围
输入样例:
5 24
4 2
2 0
8 1
6 3
12 5
输出样例:
4
样例解释
一种最佳方案是约翰给前 头奶牛购买礼物,在给第
头奶牛购买礼物时使用优惠券。
花费为
using namespace std;
const int N = 1010;
int n, b;
struct Node{
int p, s;
int sum;
bool operator < (const Node& W) const{
return sum < W.sum;
}
}a[N];
int main(){
cin >> n >> b;
int p, s;
for(int i = 0; i < n; i++){
cin >> p >> s;
a[i] = {p, s, p + s};
}
sort(a, a + n);
int res = 0;
for(int k = 0; k < n; k ++){
int cnt = 1;
int total = b - a[k].p / 2 - a[k].s;
if(total < 0) continue;
for(int i = 0; i < n; i++)
if(i != k && a[i].sum <= total) cnt++, total -= a[i].sum;
else if(a[i].sum > total) break;
res = max(cnt, res);
}
cout << res << endl;
return 0;
}