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 }