[貪欲、DP] 2019年中国の大学対抗プログラミングコンテスト(CCPC) - ネットワークトライアル釣りマスター(問題 - 6709)

トピック:http://acm.hdu.edu.cn/showproblem.php?pid=6709

釣りマスター

時間制限:2000/1000 MS(Javaの/その他)メモリ制限:65536分の65536 K(Javaの/その他)
合計提出(S):631承認提出(S):170


問題の説明
聞いた  のE Oのmは  釣りMASTERで、あなたのメンターとして彼を認めたいです。誰もが知っているようにあなたがMASTERの弟子になりたい場合は、あなたは裁判を渡す必要があります。あなたは釣りマスターを見つけるときに  電子のOのメートルを、裁判は以下の通りである:

あり  n個の  プールで魚が。以下のために  それの  時間の  魚は、少なくともかかる  T iは  シチュー分(煮過ぎるが許容可能です)。この問題を単純化するために、魚をキャッチ費やした時間がある  のk分。一度に魚1をキャッチすることができますし、唯一のポットがあるので、一つだけの魚は一度に鍋に煮することができます。あなたが魚をキャッチしている間、あなたはポットに巻き込まれている生の魚を置くことができない、それはあなたが魚をキャッチし始めた場合、あなたは後まで止めることができないことを意味する  k個  分。あなたが魚をキャッチしていないとき、あなたは(未満なしのため煮込み調理魚取ることができます  トンの私の鍋の外に)または鍋に生の魚を入れて、これらの2つの操作は時間がかかりません。鍋で煮魚は十分な時間煮込んされていない場合、あなたはそれを取ることができないことに注意してください、しかし、あなたは別の魚を捕まえるために行くか、それが十分に煮込んされるまで、ただ何もしない、しばらく待つことができます。

今  E O メートル 彼は満足のいく食事を持つことができるように、あなたはできるだけ早くすべての魚をキャッチし、シチューたい、(あなたは間違いなく魚だけ十分に煮込んだ後に食べることができることを知っています)。あなたが最短時間でそれを完了することができた場合は、  電子のOのメートルは  彼の弟子としてあなたを受け入れると言って「私が行っています!私はいっぱいです!」。あなたが、できない場合  のE Oのメートルは  あなたを受け入れ、言うことはありません「あなたが行われています!あなたがだますです!」。

ですから、最適な時間を手配した場合に裁判を渡すための最短時間は何ですか?
 

 

入力
入力の最初の行は、単一の整数で構成さ  T 1 T 20 テストケースの数を表します。

各テストケースのために、最初の行は、二つの整数含ま  N 1 N 10 5 K 1 K 10 9 プール内の魚の数と魚を捕まえるために必要な時間を表します。

2行目は含まれ  n個の  整数、  T 1 T 2を... T N 1 ≤のT iは10 9  、調理に必要な最低時間表す I - Tの時間 魚。
 

 

出力
各テストケースのために、試験を通過する最短時間を示す、一列に単一の整数を印刷します。
 

 

サンプル入力
2 3 5 5 5 8 2 4 3 3
 

 

サンプル出力
23 11
ヒント
ケース1:第三の魚(5分)キャッチは、第1回魚を入れ、第三の魚を取り出し、(3分)待って、第一の魚(5分)をキャッチし、第3回魚を入れて(第二魚を捕まえます5分)、)(5分を待って、第二に魚を入れ、第一の魚を取り出し、第二の魚を取ります。ケース2:第一の魚(4分)キャッチは、(3分)待って、第2回魚を入れ、第一の魚を取り出し、第二の魚(4分)をキャッチし、第1回魚を入れて第二の魚を取ります。
 

 

ソース
 

 

推薦します
liuyiding | 我々は慎重にあなたのためのいくつかの同様の問題を選択している:   6712   6711   6710   6709   6708 

質問の意味:

N-魚、魚、少なくとも私分だけK minの魚をキャッチする(K minよりも未満も大きくないの分Kおよび途中で停止することはできません)が必要、(TIを超えてもよい)、TIを煮込み
魚を捕まえる無制限格納することができます魚、魚のシチューだけ毎回と(魚のシチューポットのTI分に入れなければなりません後)途中で停止することはできません、あなたは釣りに行くか、魚のシチューで待機することができ、良い魚のシチューの後にすることができ、すぐに(時間がかかることはありません)へ魚や魚に入って来る
これらの魚のシチューの仕上げをキャッチし、それが取る分の最小数を完了するように求め

アイデア:

理想的な状況を考慮して、ちょうど彼がDunyuときので、これは、を利用する時間です、魚をキャッチするために余分な時間を費やして、魚のシチューの残りの時間であり、これはANS = K +Σti釣り、各時間Dunyu [TI / k]をキャッチするために利用可能な魚の数、
今回Σの存在[TI / K <N-1、ここで、(n-1の最初の時間が漁獲されているのですべての魚を捕まえることができない魚のシチューが終了したら、魚が)、つまり、これは、最小の合計を作るために、時間の無駄、時間の無駄になります、我々はする必要があり
、少なくとも、今それぞれの時間を無駄にされてどのくらいの時間を把握しますあなたは魚のシチュー[TI / K]魚をキャッチすることができますが、今、時間にすべてのオファーを再利用し、時間のTIの%kを待つ必要は、ないかもしれませんが、とき魚のシチュー終了時刻にすべての魚をキャッチすることはできません、我々はまた、キャッチする必要があります= N-1-Σ必要[ TI / K] 魚、
釣りに行くための追加過ごす時間を考慮することが、今は時間がかかる、あなたは釣りに行く、またはTI%kの時間いくつかの魚のシチューを待つために*余分な時間kの必要性を過ごすことができます魚が分をkおよび停止することはできません必要があるので、釣りに行くが、今の時間は、Ti%Dunyuが停止しますKので、我々はK-TIときDunyuの%kを無駄にし続ける必要があり、
K> K-TI%kを見つけることができ、ショー そして、これらのプログラムより良いので、私たちは魚をキャッチするために、追加の必要性を必要とする場合、あなたは-TI事前K%kは無駄に行くことを選択し、それは単に良いシーケンス後の最前列には、最終的なANSに追加された時間の無駄を必要とする時間の無駄である小さな必要出力はうまくANS

質問のうち、このサンプルでゲーム:


入力:

1
3 500
999 20 20

出力:

1540

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  のconst  int型 AMN = 1E5 + 5 4  INT T [AMN]、[AMN]無駄。
5  INT メイン(){
 6  //     COUT << 500-(999パーセント500)。
7      INT T、N、K。
8つの     長い 長いANS、cancatch。
9      のscanf(" %dの"、&T)。
10      一方(T-- ){
 11          のscanf(" %D%dの"、&​​N&K)。
12         K = ANS; cancatch = 0 ;        /// 最初のkは合計時間がkに初期化され、魚をキャッチするために数分を費やす必要があり、Dunyuフィッシング時間が0に初期化
13がある         ためにint型 I = 0を、私はN- <; ++ I ){
 14              scanfの(" %のD "、およびT [I]);
 15              ANS = + [I] T;           /// 合計時間を加えた時間Dunyu 
16              cancatch = T + [I] / K;    /// シチュー魚釣時間T = + [I]の数/ K 
17。              廃棄物[I] = KT [I]%のK;   /// KT = [I] K%の各無駄時間
18である         }
 。19          IF(cancatch <N- 1) {        ///Dunyu部とき魚は完全にオフでない場合は
20である             INT必要= N- 1。 -cancatch;       ///はまた、魚をキャッチする必要がある必要が
21である              、ソート(廃棄物、N-廃棄物+)         /// 時間の無駄をソートする前に、撮影時間の小さな廃棄物の総時間に加え必要が
22である             ためint型 I = 0 ANS + =;私は<必要I ++)廃棄物[I];
 23である         }
 24          のprintf(" %のLLDの\のN- " ;、ANS)
 25      }
 26れる }
 27  / * *
 28  N-魚、魚、少なくとも私分だけK(未満でもK minよりも大きくないの分Kと途中で停止することができない)最小の魚をキャッチする必要がある、(TIを超えてもよい)、TIを煮込み
 29 無制限の魚、魚のシチューだけたびに保つことができる魚をキャッチし、(魚のシチューポットのTI分に入れなければなりません後)途中で停止することはできません、あなたは釣りに行くか、魚のシチューで待機することができ、魚のシチュー直後に良いことができます魚や魚を思い付く(時間がかかることはありません)
 30は、 これらの魚が完成シチューキャッチするように求め、それが最小取る何分終了
 31  
32  魚、残りの時間をキャッチするために、単に余分な時間を理想的な費やす検討例をDunyuは、すなわちANS = K +Σti使用される釣り時間をDunyuことができるので、それは、各時間Dunyu [TI / k]をキャッチする魚の数が利用可能な、この時間を利用することです
 33  今回Σの存在[TI / K <N-1(N-1初めて魚を捕まえる必要があるため)、煮魚即ち全ての魚の漁獲この次に、終了していないことができ最小の合計を作るために、時間の無駄、時間の無駄になります、我々は必要な
 34の それぞれの時間を無駄にされてどのくらいの時間を見つけるために、少なくとも、今は魚のシチュー[TI / k]は魚を捕まえることができますが、再利用することはできませんときDunyuは、時間にするだけでなく、TI%kの時間を待っているが、時間のないすべての魚煮魚の漁獲終了するだけでなく、キャッチする= N-1-Σ[必要 TI / K] 魚、
 35  今テストを アカウントに釣りに行くために余分な時間がかかるために、あなたはTI%* kは今、釣りに行く、またはTI%kの時間を待つ釣りとき釣りはk個分を必要とし、停止することはできませんので、いくつかの魚のシチューを取るとき、それに余分な時間の必要性を過ごすことができますすべてのオファーはk個の時間後に停止しますので、我々は、k個の%は、ときのk-TI Dunyuを無駄に継続する必要がある
 36は、 K> K-TI%kを見つけることができ、我々は、追加の部品が必要な場合は、キャッチする必要があるので、後者の方式は、明らかに優れています選挙前に魚は、小さいK-TI%Kのような最終的な出力のANS ANSの必要性に時間のソートされた廃棄物の前列のための時間の無駄であり、無駄に行く必要がある
 [37  
38であり 、この試料に示すゲーム問題:
 39 入力:
 40  
41  1
 42  3 500
 43  999 20 20
 44  
45  出力:
 46  
47  1540
 48  
49  * * /

 

おすすめ

転載: www.cnblogs.com/Railgun000/p/11403678.html