욕심, 분리 된 세트 --POJ-1456

제목의 의미

상품의 무리가 있습니다, 그것은 판매 컷 - 오프 날짜와 가격을 제공합니다

당신은 최대 소득을, 매일 상품이 판매 선택할 수 있습니다

주제 분석

당신이 분리 된 세트를 선택할 수 있습니다 왜, 내가 시작을 이해하지 못하는

그러나 고가의 제품을 선택하려고 욕심 생각은 문제가되지 않습니다

메인이 상품을 선택하는 것입니다, 상품은 일부 선출 할 수없는 만료 될 수 있습니다

여기, 우리는 수집, 마감에 마감 힙을 분할

우리는 제품의 최대 값을 선택, 최선의 상황은 판매 데드 라인에있다

그러나, 판매 후, 같은 날짜를 말하는 상품이 날 판매 할 수 없습니다

그래서 우리는 알아 첫날 전날의 수집,에 넣어 최신 판매가장 높은 가치 제품을

이것은 욕심 전략이지만, 분리 된 세트의 방법을 사용

주제 코드

사용법 #include <iostream> 
#INCLUDE <STDIO.H> 
#INCLUDE < 문자열 .H> 
#INCLUDE <알고리즘>
 사용  스페이스 성병; 
타입 정의  LL;
CONST의  INT maxn 1E4 + = 7 ;
INT F [maxn, N;
구조체 노드 {
     INT의 P, D; 
일} [maxn]; 
INT  GET ( INT의 X) {
     경우 (F [X] == - 1 ) 리턴 X;
    다른  리턴 F [X] = GET (F [X]); 
}
부울 CMP (노드 A, 노드 B) {
     경우 (AP = BP!) 복귀 AP> BP;
    반환 광고 < BD를; 
} 
INT 의 main () {
     동안 (~는 scanf ( " %의 D ' , N)) {
         위해 ( int로 I = 1 ; i가 <= N; 내가 ++ ) 
            (scanf와를 " %의 D % d에 " , 일 [I] .P , 일 [I] · D); 
        정렬 (일 + 1 , 일 + 1 + N, CMP); 
        memset 함수 (F, - 1 , 를 sizeof(에프));
        INT ANS = 0 ;
        위한 ( int로 I = 1 ; i가 <= N; 내가 ++ ) {
             INT t = GET (일 [I] · D);
            만약 (t> 0 ) { 
                ANS + = 일 [I] .P; 
                F [t]는 T- = 1 ; 
            } 
        } 
        의 printf ( " % D \ 없음 " , ANS); 
    } 
    반환  0 ; 
}

 

추천

출처www.cnblogs.com/helman/p/11234046.html