题解 P1478 【陶陶摘苹果(升级版)】
想法很简单,估计大佬一看就懂:我想,一个苹果对应一个力量值以及一个高度,那不如按照力量排序,能达到高度并且力量值最小的优先,那我们定义一个bool类型的排序规则按照力量从小到大的顺序
下面会有注释哟。
#include<cstdio>
#include<algorithm>
using namespace std;
int n,s,a,b,ans;
struct apple{//结构体定义苹果以及高度和摘取所用的力量
int high,pow;
}app[5010];
inline bool cmp(apple x,apple y){
return x.pow<y.pow;
}
inline int canget(apple x)//判断是否可以摘,如果可以摘就返回1,否则随便返回吧
{
if(x.high<=a+b)return 1;
else return 99;
}
int main (){
scanf("%d%d%d%d",&n,&s,&a,&b);
for (int i=1;i<=n;i++)
{
scanf("%d%d",&app[i].high,&app[i].pow);
}
sort(app+1,app+1+n,cmp);//按照力量值排
for (int i=1;i<=n;i++)
{
if (canget(app[i])==1)//如果可以摘苹果,就让力量值减去这个苹果所需要的力量
{
s-=app[i].pow;
if(s<0)break;//如果没力量了,那就结束吧
else ans++;否则,能摘得数量++
}
}
printf("%d",ans);
return 0;
}