题目描述:已知n个苹果到达地上的高度xi,椅子的高度a,陶陶手伸直的最大长度b,陶陶所剩的力气s,陶陶摘一个苹果需要的力气yi,求陶陶最多能摘到多少个苹果。
分析:贪心的基础题,首先a + b是能摘到的苹果的最大高度,所以最多能摘到的个数是一定的。按照根据所需力气从小大大排序先摘所需力气小的苹果的策略就是最多的。
代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
int n, s, a, b;
struct node //结构体存每个苹果高度和所需力气
{
int x, y;
}p[5005];
bool cmp(node c, node d) //按照力气从小到大排序
{
return c.y < d.y;
}
int main()
{
int i,j, t;
while(~scanf("%d %d", &n, &s))
{
t = 0;
scanf("%d %d", &a, &b);
b = a + b;
for (i = 0; i < n; i ++)
{
scanf("%d %d", &p[i].x, &p[i].y);
}
sort(p, p + n, cmp);
for(i = 0; i < n; i++)
{
if(p[i].x <= b && s >= p[i].y)
{
t ++;
s -=p[i].y;
}
}
printf("%d\n", t);
}
return 0;
}