루오 구 P1478. 타타 사과 (업그레이드 버전) 선택
제목 설명
가을, 타오 타오 홈 사과 나무를 n의 열매를 맺을 때 그것은 년입니다. 타오 타오, 그는 의자의 센티미터 있었다 이번에 사과를 선택하는 달렸다. 그는 손이 닿지 않는 곳에 손을 때, 그는 다시 시도 의자에 설 것이다.
그룹 및 NOIp2005의 인기는 첫 번째 질문이 다른 : 타오 타오 전에 의자를 이동, 노력 만 s입니다. 물론, 때마다 나는 약간의 노력으로 사과를 선택해야합니다. 타오 타오의 <0 전에 얼마나 많은 사과를 알고 싶어하는 데리러.
이제 XI 알려진 N 사과 토토에 데리러 추구, 지상 높이, 의자 (a)의 높이, 최대 길이 직선 손 토토, B, 토토 나머지 강도의, 필요한 강도 사과 이순신을 선택 토토 도달 얼마나 많은 사과.
입력 형식
자연수 N (n≤1000n)
출력 형식
줄 1 : 두 개의 사과 N, 강도의 계산합니다.
행 2 : 두 숫자는 최대 길이 바로 손 ㄱ 토토 의자의 높이.
라인 3 번째 라인은 N-1 + : 행 높이 사과 XI 당 두의 수는, 사과 따기 노력은 이순신이 필요합니다.
샘플 입출력
입력 샘플 # 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 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;
}