します。https://blog.csdn.net/ssdut_209/article/details/51557776に転載
問題の説明
アンデッドリッチキングの賃金はNデスナイトは、ドル札を(、唯一の法案を覚えている)を取得、頻繁に自分自身を防ぐ戦いで死ぬために、プル、彼は彼自身の小道具のいくつかを購入することを決めました彼はゴブリン商人に来ました。
デスナイト:「私は小道具を購入したいです!」
ゴブリン商人:「ここでは3つの小道具、ポーション150、200魔法の薬、ポーション350無敵を持っています。」
デスナイト:「オーケー、私にポーションを与えます。」
その後、彼は左利きドル紙幣を取り出したNゴブリン商人が行きます。
ゴブリン商人:「私はあなたを思い出させるために忘れて、私たちは、ゲストのお金を探しているの習慣、そして我々はちょっと、先端を受けているより多くのお金を持っていません。」
デスナイト:「......」
デスナイトは後で購入するために、とにかく、彼自身が同様に多くの小道具を買う可能性がある場合、それは先端お金を送るだろうと思った、自宅で朝食を買ったり、できるだけ少ないが、彼はヒントを獲得するために。
死の騎士は今、彼は少なくとも先端実業家ゴブリンを与えるどのくらい、あなたは彼が計算助けたいと思います。
入力
、入力データの最初の行は整数T(1 <= T <=であり 、100) 、テストデータの数を表す試験データのT行、テストデータは、各だけ正の整数N(1 <= Nを<含有されています= 10000)、Nは、銀行券の手の中に死の騎士の額面を表します。
注意:ゴブリン店は、タイトルに記述わずか3項目です。
出力
各テストケースの場合は、あなたは先端の細いとして商人にどのくらいのお金最小出力死の騎士を無駄にする必要があります。
サンプル入力
2 900 250
サンプル出力
0 50
コードは以下の通りであります:
1つの#include <iostreamの> 2 使用して 名前空間STDを、 3 4 5 INT MAX(int型、int型、B) 6 { 7 戻り A> B?A:B; 8 } 9 のint main()の 10 { 11 // freopenは( "D:\\ INPUT.TXT"、 "R"、STDIN)。 12 // freopenは( "D:\\ output.txtと"、 "W"、STDOUT)。 13 INTのコスト[ 3 ] = { 150、200、350 }。 14 INT値[ 3 ] = { 150、200、350 }。 15 int型のT; 16 INT * V。 17 一方(CIN >> T) 18 { 19 ながら(t-- ) 20 { 21 のint最大= - 1 。 22 INT N。 23 CIN >> N。 24 V = 新しい INT [N + 1 ]。 // 加一!! 25 であれば(N < 150 ) 26 { 27 COUT << N << ENDL ;; 28 続け; 29 } 30 のmemset(V、0、はsizeof (V))。 31 のためには、(int型 = Iを0 ; iは< 3 ; iは++ ) 32 { 33 のための(int型のk = 0 ; K <= N; ++ K) // !长度是N + 1 34 { 35 であれば(K> = コスト[I ]) 36 { 37 V [K] = MAX(V [k]は、V [K-コスト[I]] + 値[I])。 38 // COUT << "V [" << K << "]" << V [k]は<< ENDL。 39 であれば(V [K]> MAX) 40 、最大= V [k]は、 41 } 42 } 43 } 44 削除Vと、 45 COUT << N-MAX << ENDL。 46 } 47 } 48 }