説明
勤勉の数ヶ月後、イーザーローンは、最終的には奨学金の素晴らしい量を獲得します。スニーカーの偉大な狂信者として、彼はスニーカーストアでそれらに彼のすべてのお金を使うことにしました。
そのようなエアジョーダンとナイキプロとしてイザーローンを収集したいスニーカーのいくつかのブランドがあります。そして、各ブランドは、様々な製品をリリースしました。イザーローンは間違いなくスニーカーマニアであるため、彼は各ブランドのために少なくとも1つの製品を購入することを望みます。
各製品の固定価格がラベル付けされているが、イザーローンは、彼自身の傾向に基づいて、それらのそれぞれの値を設定します。ハンサムな限られたお金で、彼は彼が購入しようとしている靴の合計値を最大化したいと考えています。明らかに、集電体として、彼が二度同じ製品を購入することはありません。
さて、イザーローンは、彼が買うことができる製品の合計値を最大化することを意味し、彼の問題の最善の解決策を見つける彼を助けるためにあなたを必要とします。
そのようなエアジョーダンとナイキプロとしてイザーローンを収集したいスニーカーのいくつかのブランドがあります。そして、各ブランドは、様々な製品をリリースしました。イザーローンは間違いなくスニーカーマニアであるため、彼は各ブランドのために少なくとも1つの製品を購入することを望みます。
各製品の固定価格がラベル付けされているが、イザーローンは、彼自身の傾向に基づいて、それらのそれぞれの値を設定します。ハンサムな限られたお金で、彼は彼が購入しようとしている靴の合計値を最大化したいと考えています。明らかに、集電体として、彼が二度同じ製品を購入することはありません。
さて、イザーローンは、彼が買うことができる製品の合計値を最大化することを意味し、彼の問題の最善の解決策を見つける彼を助けるためにあなたを必要とします。
入力
入力は複数のテストケースが含まれています。各テストケースは三つの整数Iserlohnのが取得する1 <= N <= 100、製品の総数を表す1 <= M <= 10000お金、及び1 <= K <= 10スニーカーブランドを表すことから始まります。次のN行はそれぞれ、3つの正の整数1ブランドの所属数、標識された価格、およびこの製品の値を意味する<= A <= K、BおよびC、0 <= B、C、D <100000で製品を表します。プロセスはファイルの最後に。
出力
各テストケースのために、スニーカーIserlohnの購入の最大合計値である整数を印刷します。イザーローンの要求を満たすことができない場合は、「インポッシブル」印刷します。
サンプル入力
5 10000 3 1 4 6 2 5 7 3 4 99 1 55 77 2 44 66
サンプル出力
255
************************************************** ************************************************** ***********************
パケットバックパック、トリプルループ!
************************************************** ************************************************** ***********************
1の#include <iostreamの> 2の#include < ストリング > 3の#include <CStringの> 4の#include <cstdioを> 5の#include <アルゴリズム> 6 使って 名前空間STD。 7 INTの DP [ 20 ] [ 10011 ]、I、J、K、ST。 8 int型N、合計、M。 9 構造体ノード 10 { 11 のint ID; 12 int型の価格。 13 INTの値; 14 } E [ 1001 ]。 15 16 のボイドパック() 17 { 18 のmemset(DP、0、はsizeof (DP))。 19 のために(i = 1 ; I <= M I ++ ) 20 用(J = 1 ; J <= N; J ++ ) 21 のための(K =和; K> = 0 ; k-- ) 22 であれば(E [J ] .ID == I && E [J] .price <= K) 23 DP [I] [K] = MAX(DP [I] [K]、MAX(DP [I] [KE [J] .price] + E [J] .VALUE、DP [I- 1 ] [KE [J] .price] + E [J] .VALUE))。 24 } 25 のint main()の 26 { 27 ながら(scanf関数(" %D%D%D "、&N、&和、&M)=!EOF) 28 { 29 用(i = 1 ; iが++; iが<= N ) 30 { 31 のscanf(" %D%D%D "、&E [I] .ID、&E [I] .price、&E [I] .VALUE)。 32 } 33 パック()。 34 であれば(DP [M] [和] == 0 ) 35 のprintf(" 不可の\ n " ); 36 他の 37 のprintf(" %d個の\ nを"、DP [M] [和])。 38 } 39 リターン 0 。 40 }
ます。https://www.cnblogs.com/sdau--codeants/p/3354483.htmlで再現