这道题只要会自定义cmp恰当地进行排序,其他部分没有什么大问题。
上代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int n,s,h1,h2,cnt;
4 struct apple{
5 int height,ns;//height为苹果高度,ns是所需要的力气
6 }a[10000];
7 bool cmp(apple x,apple y){
8 return x.ns<y.ns;//根据所需要的力气由高到低进行排序
9 }
10 int main(){
11 cin>>n>>s;
12 cin>>h1>>h2;
13 int h=h1+h2;//能够到的高度为椅子和身高总和
14 for(int i=1;i<=n;i++){
15 cin>>a[i].height>>a[i].ns;
16 }//输入每个苹果的高度和所需要的力气
17 sort(a+1,a+n+1,cmp);//根据要求排序
18 for(int i=1;i<=n;i++){
19 if(a[i].height>h)continue;
20 //无法摘到,下一层循环
21 if(a[i].ns>s)break;
22 //如果所需要的力气超出剩余力气,结束循环
23 s-=a[i].ns;//总力气减去这个苹果需要的力气
24 cnt++;
25 }
26 cout<<cnt;
27 return 0;
28 }
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 »
洛谷 P1478 陶陶摘苹果(升级版) 题解