P1478 陶陶摘蘋果(升級版)

題目描述

又是一年秋季時,陶陶家的蘋果樹結了n個果子。陶陶又跑去摘蘋果,此次她有一個a公分的椅子。當他手夠不着時,他會站到椅子上再試試。html

此次與NOIp2005普及組第一題不一樣的是:陶陶以前搬凳子,力氣只剩下s了。固然,每次摘蘋果時都要用必定的力氣。陶陶想知道在s<0以前最多能摘到多少個蘋果。ios

如今已知n個蘋果到達地上的高度xi,椅子的高度a,陶陶手伸直的最大長度b,陶陶所剩的力氣s,陶陶摘一個蘋果須要的力氣yi,求陶陶最多能摘到多少個蘋果。spa

輸入格式

第1行:兩個數 蘋果數n,力氣s。code

第2行:兩個數 椅子的高度a,陶陶手伸直的最大長度b。orm

第3行~第3+n-1行:每行兩個數 蘋果高度xi,摘這個蘋果須要的力氣yi。htm

輸出格式

只有一個整數,表示陶陶最多能摘到的蘋果數。blog

輸入輸出樣例

輸入 #1
8 15
20 130
120 3
150 2
110 7
180 1
50 8
200 0
140 3
120 2
輸出 #1
4

說明/提示

全部數據:n<=5000 a<=50 b<=200 s<=1000,xi<=280 yi<=100排序

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 5050;
int vi[N],xi[N];
int f[N];

typedef pair<int,int> PII;

PII q[N];

int main(){
	int n,s;
	int a,b;
	cin >> n >> s >> a >> b;

	for(int i = 0;i < n;i++){
		scanf("%d%d",&q[i].second,&q[i].first);//按摘蘋果的氣力排序
	}
sort(q,q+n);

    int ans = 0;
    int air = 0;
    for(int i = 0;i < n;i++){
        
        if(q[i].second <= (a+b) && air <= s){//當高度小於板凳加身高,而且氣力小於搬完板凳以後的氣力
            
            ans ++;
            air += q[i].first;
            if(air > s){
                ans --;
            }
        }
    }
    cout << ans;
}
相關文章
相關標籤/搜索