블루 브릿지 : 기념품 패킷 (주문 + 센터 가중 욕심 알고리즘)

기념품 패킷 (욕심 알고리즘 중앙 중점 +의 종류)

문제 설명
  설날 접근은, 학교에 대한 ⼯ 발행을 담당 ⽣ Lele의 기념품 새해 파티를 배우게됩니다. 얻은 자에게 학생들 그래서
기념품 값이 상대적으로 균형, 그 가격에 따라로 ⾏ 그룹화 기념품을 사고 싶어하지만, 각 그룹은 두 개의 기념품까지 포함 할 수 있으며,
그리고 기념품의 각 세트의 가격은 주어진 정수를 ⼀ 초과 할 수 없습니다. 보장하기 위해 가능한 최단 시간 내에 그 모든 기념품, 음악을 완성
르 패킷 목적지 시간의 최소 수를 기대하고있다.
  당신의 작업은 ⼀ 패킷의 최소 번호 모든 패킷 ⽅ 경우 ⼀ 종, 패킷 출력 대상 시간의 최소 번호를 찾을 수있는 프로그램을 작성하는 것입니다.
START 입력 형식
  START 입력 구비 + 2 N ⾏ :
  제 1 ⾏ 포함
W ⼀ 정수 기념품 각각 가격 한도.
  중 2 ⾏ ⼀ 정수 N-입니다 그것은 기념품에 사용 가능한 항목의 총 수를 나타냅니다.
  의 3 ~ N + 2 ⾏ 각 ⾏ 역시 양의 정수 (PI)를 포함 (5 <= PI <= w), 대응하는 요금 기념품.
출력 형식
  출력 만 ⼀ ⾏, 어느 하나의 정수를 포함하고, 즉, 패킷의 도착 시간의 최소 개수.
샘플 잃게 START
(100)
9
(90)
(20)
(20)
(30)
(50)
(60)
(70)
(80)
(90)
샘플 출력
6
스케일 데이터와 규칙
  50 % 의 전체 데이터가 비어 : . 1 <= N - <= 15
  100 % 의 전체 데이터가 비어 : . 1 <= N이 - <= 30000, 80 <= W <= 200 인
 
 

분석 : + 탐욕 센터 정렬 가중. ⼩ 확대, I, J 포인터 정렬 시작에서 좌 탐색에 좌우된다.

만약 [I] + A [J] <= w, 이들 두 품목은 START ⼀ 기 및 이동 동시에 포인터 배치;

모든 항목이 통과 될 때까지 그렇지 않으면, 별도의 문서 자료 START에 단지 J 점 ⼀ 그룹은 ~ ... 포인터 J ij에 이동

참고 :이 개 항목 각 그룹, 문제의 의미에 따라

 
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main() {
 int w, n;
 scanf("%d %d", &w, &n);
 int *a = new int[n];
 for( int i = 0; i < n; i++)
      scanf("%d", &a[i]);
 sort(a, a+n);
 int i = 0, j = n-1, cnt = 0;
 while( i <= j) {
    if( a[i] + a[j] <= w) {
        i++;
    }
    cnt++;
    j--;
 }
 cout << cnt;
 return 0; 
}

 

 
 
게시 된 736 개 원래 기사 · 원 찬양 (123) ·은 80000 +를 볼

추천

출처blog.csdn.net/S_999999/article/details/103354298