루오 구 P1478. 타타 사과 (업그레이드 버전) 선택

루오 구 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;
}

추천

출처www.cnblogs.com/fsh001/p/12327425.html