题目传送门https://www.luogu.com.cn/problem/P1478
截图来自洛谷:
这道题就是这道题的升级版而已,我们可以定义一个结构体分别存抓当前苹果的力气与高度。
之后进行从第1个苹果到第n个苹果的循环,判断当前苹果高度是否够,力气是否够。
最重要的是要排序,因为要摘得苹果最多,所以要先拿需要力气小的。
bool cmp(w a,w b){
return a.l < b.l;
}
cmp函数就可以这样写这里的a.l和b.l分别表示a苹果需要的力气与b苹果需要的力气。
判断条件可以这样写:
if(a[i].l <= s && a[i].g <= z){
s -= a[i].l;
sum++;
}
如果力气、高度都够那就将桃桃总力气(s) - 当前拿苹果需要的力气,并且将计数变量(sum)+1。
完整代码:
#include <bits/stdc++.h>
using namespace std;
struct w{
int g,l;
};
bool cmp(w a,w b){
return a.l < b.l;
}
int main(){
int n,s;
cin >> n >> s;
w a[n+1];
int y,shou,z;
cin >> y >> shou;
z = y + shou;
for(int i = 1;i <= n;++i){
cin >> a[i].g >> a[i].l;
}
int sum = 0;
sort(a+1,a+n+1,cmp);
for(int i = 1;i <= n;++i){
if(a[i].l <= s && a[i].g <= z){
s -= a[i].l;
sum++;
}
}
cout << sum;
return 0;
}
希望对你有帮助。
如果可以能点一个赞+关注吗?
标签:洛谷,shou,力气,int,题解,P1478,苹果,cmp From: https://blog.csdn.net/iclouding/article/details/141036613