すべてのコイン、組み合わせ問題 - ダイナミックプログラミングhdu2069

問題の説明
50セント、25セント、10セント、5セント、1セント:コインの5種類があると仮定する。私たちは、お金の所定量のためにこれらの硬貨との変更を行いたいです。

我々は11セントを持っている場合、例えば、我々は1つの10セント硬貨と1つの1セント硬貨、または2つの5セント硬貨と1つの1セント硬貨、または1つ5セント硬貨六1-変化を行うことができセント硬貨、または11の1セント硬貨。したがって、上記のコインと11セントのための変更を行うことの4つの方法があります。我々はゼロパーセントのための変更を行う一つの方法があることを数えることに注意してください。

セントにお金の任意の金額の変更を行うの異なる方法の総数を見つけるためのプログラムを書きます。あなたのプログラムは、100枚のコインを扱うことができるはずです。
 

 

入力
入力ファイルは、行の任意の数、セントで金額の番号(≤250)からなるそれぞれを含有します。
 

 

出力
各入力線、硬貨の上記5種類の変更を行うの多くの異なる方法を含む出力ラインのために。
 

 

サンプル入力
11 26
 
ACコードのコピー:

#include <iostreamの>
使用して名前空間STD;
CONST INTマネー= 251;
CONST INT COIN = 101;
DP [マネー] [コイン] int型= {0}; // DP [I] [J]私の量、コインの数を表します。 jは型の方法である
int値[5] = {1,5,10,25,50 }。

ボイド()解決
{
なぜのみDP [0] [0] = //ため(; Iがお金を<I ++はINT I = 0) 0、 DP [j]は[1] =ので DPを[J] [1 ] + DP [J-値[ I] [K-1] のみJ値[I] == 0、カナダの順1。
// DP [I] [0] = 1;
DP [0] [ 0] = 1;
のために(;私は<5; I = 0 int型。私は++)
{
ため(INT J =値[I]; J <マネー; J ++)
{
ため(INT K = 1; K <COIN; K ++)
{
DP [J] [K] DP [J] [K] + DP [J-値[I] [K-1] =;
}
}
}
}
int型のmain()
{
)(解決;
INT ANS [マネー] = {0};
ANS [0] = 1; //このステップは忘れてはならないことに注意してください、特定の値
のために(INT I = 1; Iがお金を<; Iは++)
{
ため(INT J = 1; J <COIN、J ++ )
{
ANS [I] DP = [I] [J] + ANS [I];
}
}
S int型、
一方(CIN >> S)
COUT << ANS [S] << ENDL。
0を返します。
}

 

学習動的計画の開始以来、問題と考えられ、このコインの問題が始まりました。今まで、私はそれが解の値のための動的プログラミング漸化式の使用は、前に解決する必要性から計算されている理解し、私は3番目の値の数に似ているかを知りたい、私たちのようにする必要がありそれ以外の場合は再発の関係が行くことはありません、我々はすべてのフィボナッチ数に精通しているとして、最初の数は、例えば、第2の数を乗じてみましょうが、理解しなければならない初期値に注意を払います。またフィボナッチ列が最も簡単なDPで、少し複雑あなたが再帰5時間を必要とするコイン問題のように、再帰的に一度より少しが必要になります。

おすすめ

転載: www.cnblogs.com/sunjianzhao/p/11371647.html
おすすめ