貪欲、互いに素セット--POJ-1456

タイトルの意味

商品の束がありますが、それは売上高カットオフ日付と価格を提供します

あなたは最大の収入を作り、毎日販売した商品を選択することができます

トピック分析

あなたは互いに素セットを選ぶことができますなぜ、私が先頭を理解していません

しかし、高価格品を選択しようとすると、貪欲な思考は問題ではありません

メインは、商品を選択することで、商品がいくつか選出することができない期限切れであってもよいです

ここでは、コレクションのために、期限に期限をヒープを分割します

私たちは、商品の最大値を選択し、最高の状況は、その期限で販売されて

しかし、販売後、同じ日付を言って品物がこの日に売却することはできません

だから我々は見つけるために最初の日、前日のコレクションにそれらを置く最新発売最高値の商品のを

これは貪欲な戦略ですが、ばらばらのセットの方法を使用しました

トピックコード

書式#include <iostreamの> 
書式#include <stdio.hに> 
する#include < 文字列の.h> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
typedefの長い 長いLL。
const  int型 MAXN = 1E4 + 7 INT F [MAXN]、N。
構造体ノード{
     int型P、D。
}日[MAXN]。
INT  GETINT X){
     場合(F [X] == - 1リターンX。
    他の リターン F [X] = GET (F [X]); 
}
ブールCMP(ノードA、ノードB){
     場合(AP = BP!)戻り AP> BP。
    リターン広告< BD。
} 
INT (){主
     ながら(〜のscanf(" %d個"、&N)){
         ためint型 I = 1を iが++; iが<= N 
            のscanf(" %d個の%のD " .P [i]は、&日、&日[I] .D)。
        ソート(日 + 1日+ 1 + N、CMP)。
        memsetの(F、 - 1はsizeof(f)参照)。
        int型 ANS = 0 ;
        以下のためにint型 i = 1 ; iが<= N; iは++ ){
             int型、T = GET (日[I] .D)。
            もし(T> 0 ){ 
                ANS + = 日[I] .P。
                F [T] = T- 1 
            } 
        } 
        のprintf(" %d個の\ n " 、ANS)。
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/helman/p/11234046.html