문제 보고서에 HDOJ4864 작업 솔루션

주제 포털

[제목] 효과

$ m의 $ 작업, 작업 $이 있습니다 내가 $ 등급 $의 y_i의 $는 $ x_i로부터 $에 대한 작업을 완료하는 데 필요한 시간, $ (500) * x_i로부터 + 2 * y_i의 $의 소득. 더 이상 작업보다 기계 수준 또는 기계 시간보다 작업 수준이 기계를 사용할 수없는 경우가 $ $ N-기계는 첫 번째 레벨 I $ $ $ y_i 기계는, $ x_i로부터의 $ 긴 작업 시간 $입니다 작업을 완료합니다. 기계는 작업은 많은 작업을 추구하고 최대의 이익을 얻을까지 완료 할 수있는 방법을 기계에 수행 할 수 있습니다, 작업을 완료 할 수 있습니다.

[분석] 아이디어

이러한 욕심이 문제는 분명하지만, 소득 시간의 큰 비율, 그래서 첫 번째 키워드로 키워드 순위를 시간을 고려하기 때문에 작업에 두 번째, 조금 어렵게 생각하고 기계가 내려졌지만 정렬. 그런 다음 각 작업, 기계의 조건을 충족하는 각 레코드 시간을 열거 한 다음 기계의 조건을 만족하고 소득 수준을 계산하는 데 큰 작은 찾습니다.

[] 코드 구현

1 #INCLUDE <cstdio>
 2 #INCLUDE <iostream>
 3 #INCLUDE <알고리즘>
 4 #INCLUDE <CString을>
 5  #DEFINE RG 등록
 6  #DEFINE의 (나, a가, b) (RG의 인터넷 용 난 = 이동; 나는 < = B; 내가 ++)
 7  #DEFINE가 긴 긴 것이다
 8  사용  스페이스 성병;
9  CONST의  INT의 N = 100,002 ;
10  INT의 N, m, NUM [ 102 ] ans1;
11  게요 ans2;
12  구조체 기계 {
 13      INT의 X, Y;
14  } A [N], 2 [N];
(15) 부울 CMP (시스템 A, 컴퓨터 B) {
 16 일      경우 (도끼 = Bx로!) 복귀 도끼> Bx로;
17       불안> 단계;
18  }
 19  INT 의 main () {
 20      동안 (는 scanf ( " %의 D % d에 " , N, m)! = EOF) {
 21          이동 (I, 1 , N)는 scanf ( " % d 개 %의 D ' , A [I ] .x를, & A [i]를 .Y);
22          이동 (I, 1 , m)는 scanf ( " % d 개 %의 D ' , 및 B [I] .x를, B의 [I] .Y);
23          정렬 (a + 1, A + . 1 + N-, CMP), 정렬 방법 (B의 + . 1 , B의 + . 1 + m, CMP),
 (24)          INT J = . 1 ,
 25          이동 (I, . 1 , m) {
 26은              그동안 (J <= N - && A [J] .x를 > = B가 [I]는 .x를) NUM [A [J] .Y] ++, J는 ++ ;
 27              // 기록 시스템의 시간 조건을 만족 
28              이동 (K, B가 [I] .Y, 100 )
 (29)                  IF (NUM [K]) { // 검색 시스템 레벨이 조건을 만족 
30                      NUM [K] -; ANS1 ++; ANS2 + = 500 * B가 [I]를 .x를 + 2 *의 [I]를 .Y B;
 31은                      BREAK ;
 32                 }
 33          }
 34          의 printf ( " %의 D %의 LLD \ 없음 " , ans1, ans2);
35          ans1 = ans2 = 0 ; memset 함수 (NUM, 0 , 는 sizeof (NUM));
36      }
 37      반환  0 ;
38 }
코드는 여기 찌를

추천

출처www.cnblogs.com/THWZF/p/11272747.html