羅区P1478。タタは、リンゴ(アップグレード版)を選びます
タイトル説明
秋、タオタオホームリンゴの木は、n個の実を結ぶ年です。タオタオは、リンゴを選ぶために、彼は椅子のセンチメートルを持っていたこの時間を走りました。彼は手の届かないところに手とき、彼は再び試すために椅子の上に立ちます。
グループの人気とNOIp2005最初の質問は異なっている:タオタオ、努力は唯一sの前にスツールを移動すること。もちろん、すべての時間は、私はいくつかの努力でリンゴを選択する必要があります。タオタオはS <0の前にどのように多くのリンゴをお知りになりたいためにピックアップします。
現在知られているXI Nリンゴはトトをピックアップしようと、必要な強度リンゴYIを選択TOTO、地上高さ、椅子aの高さ、最大長ストレート手トト、B、東都残りの強さsに達しどのように多くのリンゴ。
入力形式
自然数n(n≤1000n)
出力フォーマット
1行目:2個のリンゴを数えるnは、強度の。
行2:椅子二つの数字、最大長ストレート手トトbの高さ。
行の高さリンゴXIごとに2つの数、労力必要YIピッキングリンゴ:ライン3 + n-1の第3行。
サンプル入力と出力
入力サンプル#1
8 15
20 130
120 3
150 2
110 7
180 1
50 8
200 0
140 3
120 2
サンプル出力#1
4
説明/ヒント
データの100%に、n≤5000、a≤50、b≤200、s≤1000、xi≤280、yi≤100。
トピックのアイデア
#include<bits/stdc++.h>
using namespace std;
const int N = 5e3+10;
struct app{
int x;
int y;
}q[N];
bool cmp(app a1,app a2)
{
return a1.y < a2.y;
}
int main()
{
int n,s,a,b;
scanf("%d%d%d%d",&n,&s,&a,&b);
int i = 0;
while(n--)
{
scanf("%d%d",&q[i].x,&q[i].y);
if(q[i].x>a+b||q[i].y>s)
continue;
i++;
}
sort(q,q+i,cmp);
int res = 0;
for(int j=0;j<i;j++)
{
s-=q[j].y;
if(s<0)break;
res++;
}
printf("%d",res);
return 0;
}