这道题要贪心
顺便科普一下:贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
知道贪心算法了吗
那就看看程序吧
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,s1,s2,sum;
struct apple{
int high;
int power;
}a[5000];
bool cmp(apple a,apple b){
return a.power<b.power;
}
int main(){
cin>>n>>m;
cin>>s1>>s2;
int s3=s1+s2;
for(int i=0;i<n;i++)cin>>a[i].high>>a[i].power;
sort(a,a+n,cmp);
for(int i=0;i<n;i++)if(a[i].high<=s3&&m-a[i].power>=0){
m-=a[i].power;
sum++;
}
cout<<sum;
return 0;
}