本萌新第一次发布题解,若有不严谨处请谅解。
我看了前面几位大佬的手笔,表示自己还是比较钟爱桶排序的。它非常简易直接,还省时间,尤其对于这类题目占用的的空间也很小。
我们看到题目下面的说明:xi<=280 yi<=100 这简直就是为桶排序量身定制啊!
因为淘淘要摘到最多的苹果,我们便可以对每个苹果所需的力气进行桶排序。下面进入正文:
陶陶摘苹果(升级版)题解
#include<iostream>
using namespace std;
int c[101];//定义一百个桶子,c[i]代表用i个力气能摘到的苹果的数目
int main(){
int n,s,h,a,b,i,t=0;
cin>>n>>s>>h>>i;h+=i;//输入,借用"i"将淘淘用凳子达到的最大高度复制给"h"
for(i=1;i<=n;i++){
cin>>a>>b;
if(a<=h)c[b]++;//如果能摘到,就在用b个力气能摘到苹果的桶子中加一
}
//接下来 按力气从小到大选苹果
for(i=0;i<=100&&s>=0;i++){//注意要从"0"开始,有苹果是免费的
while(c[i]){//一个桶子里也可有多个苹果
s-=i;//减去摘这个苹果的力气
t++;//摘到的苹果数加一
c[i]--;//桶里的苹果减一个
if(s<0){//当力气没了时结束
t--;//这个苹果没有足够力气摘不了(s<0)
break;
}
}
}
cout<<t;//输出。
return 0;
}
怎么样,是不是非常简短,时间空间都用的很少,那么点个赞吧!