解题思路:
1.由题意得,和我们之前做过的摘苹果多了一个力气, 分析,肯定是先挑所费力气较小的苹果取摘(贪心) 并且可以够的到这个苹果的话
2. 所以创建一个结构体数组 ,包含两个变量,h和y,分 别表示苹果离地高度和摘这个苹果所费的力气
3. 然后按照力气由小到大排序,定义cmp函数 开始遍历,如果能够摘到这个苹果,并且当前的力气 大于等于摘这个苹果所需要的力气,那么sum++,并 且力气值更新,s=s-a[i].y
4. 输出sum即为所求
#include<bits/stdc++.h>
using namespace std;
struct node{
int h,y;
}a[5005];//结构体数组,h为地面高度,y为所费力气
bool cmp(node xx,node yy)
{
return xx.y<yy.y;//按照力气从小到大排序
}
int main()
{
int n,s;
cin>>n>>s;
int c,b;
cin>>c>>b;
for(int i=1;i<=n;i++)
cin>>a[i].h>>a[i].y;//分别输入苹果离地高度和所费力气
sort(a+1,a+n+1,cmp);//排序
int sum=0;//累加器
for(int i=1;i<=n;i++)
{
if(a[i].h<=c+b&&s>=a[i].y)//如果这个苹果够得到并且当前力气大于等于摘这个苹果的力气
{
sum++;//苹果数加1
s=s-a[i].y;//减去力气
}
}
cout<<sum;
return 0;
}