原题链接戳这里!!!
这道题很经典,而且可以作为stl入门题来做,推荐刚开始学stl的同学尝试一下。
其实我学stl的时候,就是把之前的很多题再拿来用stl改一下,慢慢就熟练了。
代码及题解
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
vector<int> ap;//定义一个不定长数组 apple简写ap
int n, s, a, b, p, q, sum=0, ans=0;
cin>>n>>s>>a>>b;//读入题上要求的值
for(int i = 0;i < n; i++){//逐个处理苹果
cin >> p >> q;
if(p > a + b) continue;//如果够不着就不将其放入数组
else ap.push_back(q);//push_back(数据)将苹果消耗的力气放入数组
}
sort(ap.begin(),ap.end());//对苹果消耗力气排序,先摘消耗小的
for(int i = 0;i < ap.size();i++)//逐个处理有能力摘的苹果
if(sum + ap[i] > s) break;//判断当前苹果能否摘取
else{//摘苹果,总数ans加一
sum += ap[i];
ans ++;
}
cout<<ans;
return 0;
}