洛谷P1478 陶陶摘苹果(升级版)

题目数据范围小,开两个数组手写冒泡应该也能过,不过和之前在牛客上的一题类似用结构体数组就好了,主要是注意用结构体数组的排序

题目

题目描述

又是一年秋季时,陶陶家的苹果树结了n个果子。陶陶又跑去摘苹果,这次她有一个a公分的椅子。当他手够不着时,他会站到椅子上再试试。

这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力气只剩下s了。当然,每次摘苹果时都要用一定的力气。陶陶想知道在s<0之前最多能摘到多少个苹果。

现在已知n个苹果到达地上的高度xi,椅子的高度a,陶陶手伸直的最大长度b,陶陶所剩的力气s,陶陶摘一个苹果需要的力气yi,求陶陶最多能摘到多少个苹果。

n<=5000 a<=50 b<=200 s<=1000

输入输出格式

输入格式:

第1行:两个数 苹果数n,力气s。

第2行:两个数 椅子的高度a,陶陶手伸直的最大长度b。

第3行~第3+n-1行:每行两个数 苹果高度xi,摘这个苹果需要的力气yi

输出格式:

只有一个整数,表示陶陶最多能摘到的苹果数。

输入样例#1:

8 15
20 130
120 3
150 2
110 7
180 1
50 8
200 0
140 3
120 2

输出样例#1:

4

答案

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 const int N = 5000 + 10;
 5 int n, s, a, b, ans;
 6 
 7 struct app
 8 {
 9     int x;
10     int y;
11 }c[N];
12 
13 bool cmp(app aa, app bb) //结构体排序
14 {
15     return aa.y < bb.y;
16 }
17 
18 int main()
19 {
20     cin >> n >> s >> a >> b;
21     for(int i = 0; i < n; i ++ )
22         scanf("%d%d",&c[i].x,&c[i].y);
23         
24     sort(c, c+n, cmp);
25     for(int i = 0; i < n; i ++ )
26     {
27         if(c[i].x <= (a + b))
28         {
29             s -= c[i].y;
30             if(s < 0)  break;
31             ans ++ ;
32         }
33     }
34     cout << ans;
35     return 0;
36 }

猜你喜欢

转载自www.cnblogs.com/chuyds/p/10982022.html