其他分享
首页 > 其他分享> > P1478 陶陶摘苹果(升级版)

P1478 陶陶摘苹果(升级版)

作者:互联网

P1478 陶陶摘苹果(升级版)


题目描述

又是一年秋季时,陶陶家的苹果树结了n个果子。陶陶又跑去摘苹果,这次他有一个a公分的椅子。当他
手够不着时,他会站到椅子上再试试。
这次与NOlp2005普及组第一题不同的是: 陶陶之前搬凳子,力气识剩下s了。当然,每次摘苹果时都要
用一定的力气。陶陶想知道在s < 0之前最多能摘到多少个苹果。
现在已知n个苹果到达地上的高度xi,椅子的高度a,陶陶手伸直的最大长度b,陶陶所剩的力气s,陶
陶摘一个苹果需要的力气Yi,求陶陶最多能摘到多少个苹果。

输入格式
第1行:两个数苹果数n,气s。
第2行:两个数椅子的高度a,陶陶手伸直的最大长度b。
第3行~第3+n- 1行:每行两个数苹果高度xi,摘这个苹果需要的力气Yi。

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

 

输入输出样例
输入#1
8 15
20 130
120 3
150 2
1107
180 1
508
2000
140 3
120 2

输出#1

4

说明/提示
对于100%的数据,n≤5000,a≤50,b≤200,s≤1000,xi≤280,Yi≤100。

 

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 struct  node{
 5     double x;//高度x
 6     double y;//力气y
 7 }data[5001];
 8 bool cmp(node X,node Y){
 9     if(X.x==Y.x)
10         return X.y<Y.y;
11     return X.y<Y.y;
12     
13 }
14 int main(){
15     int n,s;//苹果数n<=5000,力气s<=1000
16     int a,b;//椅子高度a<=50,伸手最大长度b<=200
17     cin>>n>>s;
18     cin>>a>>b;
19     if(s<=0) {
20         cout<<0<<endl;
21         return 0;
22     }
23     for(int i=0;i<n;i++){
24         cin>>data[i].x>>data[i].y;
25     }
26     sort(data,data+n,cmp);
27     int sum=0;//摘的苹果数
28     for(int i=0;i<n;i++){
29         if(data[i].y>s){
30             break;
31         }
32         //力气够了
33         if(data[i].x<=(a+b)){//高度够了
34             s-=data[i].y;
35             sum++;   
36         }
37     }
38     cout<<sum<<endl;
39     return 0;
40 }
View Code

 

标签:node,力气,P1478,最多能,苹果,陶陶,data,升级版
来源: https://www.cnblogs.com/NirobertEinteson/p/12458968.html