[LuoGu / 욕심] P1478 타타 사과 (업그레이드 버전) 선택

문제 설명 :

제목 설명

가을, 타오 타오 홈 사과 나무를 n의 열매를 맺을 때 그것은 년입니다. 타오 타오, 그녀는 의자의 센티미터 있었다 이번에 사과를 선택하는 달렸다. 그는 손이 닿지 않는 곳에 손을 때, 그는 다시 시도 의자에 설 것이다.

그룹 및 NOIp2005의 인기는 첫 번째 질문이 다른 : 타오 타오 전에 의자를 이동, 노력 만 s입니다. 물론, 때마다 나는 약간의 노력으로 사과를 선택해야합니다. 타오 타오의 <0 전에 얼마나 많은 사과를 알고 싶어하는 데리러.

이제 알려진 사과 높이 XI N 땅, 의자 (a)의 높이, 타오 타오 손 직선 B의 최대 길이에 도달, 타오 타오 남아있는 강도들, 타오 타오는 얼마나 많은 타오 타오를 데리러 추구, 사과 노력 이순신을 선택해야합니다 애플.

입력 형식

줄 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은 <B = 50 <= 200 S <= 1000


기본적인 아이디어 :

온라인 algorithem 처리 입력 데이터의 사용은 요소가 priority_queue의 요구 사항을 충족하기 위해 생각

그런 다음 사용은 애플이 마침내 얻을 수있는 방법을 많이보고, 팝하고 있습니다.

소위 욕심이 알고리즘의 아이디어가 여기에 사용, 각각의 대부분의 아이템을 얻을 수있는 같은 노력의 노력을 비용 항목의 최소 걸릴.

AC 코드 :

#include<bits/stdc++.h>
using namespace std;

int main() {
  int n, s;
  cin >> n >> s;
  int a, b;
  cin >> a >> b;
  priority_queue<int, vector<int>, greater<int>> q;
  for (int i = 0; i < n; ++i) {
    int x, y;
    cin >> x >> y;
    if (x <= a + b) {
      q.push(y);
    } 
  }
  int count = 0;
  while (!q.empty() && s >= q.top()) {
    s -= q.top();
    ++count;
    q.pop();
  }
  cout << count << endl;
  return 0; 
}

다른 경험 :

  1.  우선 순위는 첫째, 가장 큰 밖으로있다. 여기에 당신이 빌드 priority_queue에 복사 기능의 큰 <유형>을 사용할 필요가 있으므로, 작은 밖으로 원하는
  2. 데이터 구조를 사용하는 경우를 비우하는 경향이있을 때, 그럴 추가 판사가 비어 있습니다 .
게시 된 137 개 원래 기사 · 원 찬양 19 ·은 10000 +를 볼

추천

출처blog.csdn.net/qq_43338695/article/details/102854301