0
点赞
收藏
分享

微信扫一扫

礼物(春季每日一题 43)

农夫约翰想给他的 礼物(春季每日一题 43)_#include 头奶牛购买礼物,但是他的预算只有 礼物(春季每日一题 43)_i++_02 元。

奶牛 礼物(春季每日一题 43)_i++_03 希望获得的礼物的价格为 礼物(春季每日一题 43)_ios_04,运输成本为 礼物(春季每日一题 43)_#include_05,也就是说约翰要帮奶牛 礼物(春季每日一题 43)_i++_03 买礼物,共需花费 礼物(春季每日一题 43)_枚举_07 元钱。

约翰有一张特殊的优惠券,如果使用该优惠券来订购一份礼物,那么该礼物的价格会变为只有正常价格的一半。

如果约翰用该优惠券给奶牛 礼物(春季每日一题 43)_i++_03 买礼物,那么他只需要支付 礼物(春季每日一题 43)_i++_09 元钱。

请帮助约翰确定他最多可以给多少头奶牛购买礼物。

输入格式
第一行包含两个整数 礼物(春季每日一题 43)_#include礼物(春季每日一题 43)_i++_02

接下来 礼物(春季每日一题 43)_#include 行,每行包含两个整数 礼物(春季每日一题 43)_ios_04礼物(春季每日一题 43)_#include_05

输出格式
输出约翰可以购买礼物的奶牛最大数量。

数据范围
礼物(春季每日一题 43)_#include_15
礼物(春季每日一题 43)_贪心算法_16
礼物(春季每日一题 43)_枚举_17

输入样例:

5 24
4 2
2 0
8 1
6 3
12 5

输出样例:

4

样例解释
一种最佳方案是约翰给前 礼物(春季每日一题 43)_#include_18 头奶牛购买礼物,在给第 礼物(春季每日一题 43)_ios_19 头奶牛购买礼物时使用优惠券。

花费为 礼物(春季每日一题 43)_贪心算法_20

#include<iostream>
#include<algorithm>

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;
}


举报

相关推荐

0 条评论