最小コイン交換問題
コインC(c1、c2、……Cn)のリストがあり、値Vも指定されています。ここで問題となるのは、チャンスをVにするために最小数のコインを使用することです。
注- コインの数が無限であると仮定しますC
この問題では、異なるコインのセットC {1、2、5、10}が与えられていると考えます。各タイプのコインは無限にあります。要求された値を変更するために、あらゆる種類のコインの最小数を取得しようとします。
例として、値22の場合、最小値として{10、10、2}、3コインを選択します。
このアルゴリズムの時間計算量idO(V)、ここでVは値です。
入力と出力
Input: A value, say 47 Output: Enter value: 47 Coins are: 10, 10, 10, 10, 5, 2
アルゴリズム
findMinCoin(value)
入力- 変更する価値
出力- コインのセット。
Begin coins set with value {1, 2, 5, 10} for all coins i as higher value to lower value do while value >= coins[i] do value := value – coins[i] add coins[i], in thecoin list done done print all entries in the coin list. End
例
#include<iostream> #include<list> #define COINS 4 using namespace std; float coins[COINS] = {1, 2, 5, 10}; void findMinCoin(int cost) { list<int> coinList; for(int i = COINS-1; i>=0; i--) { while(cost >= coins[i]) { cost -= coins[i]; coinList.push_back(coins[i]); //add coin in the list } } list<int>::iterator it; for(it = coinList.begin(); it != coinList.end(); it++) { cout << *it << ", "; } } main() { int val; cout << "Enter value: "; cin >> val; cout << "Coins are: "; findMinCoin(val); cout << endl; }
出力
Enter value: 47 Coins are: 10, 10, 10, 10, 5, 2
-
C++の最大ヒープの最小要素。
問題の説明 最大ヒープの値が最小の要素を見つけます。 最大ヒープ以下を考えてみましょう。 ルートノードの最大ヒープ値は、常にその子ノードよりも大きくなります。このプロパティにより、値はリーフノードの1つに存在すると結論付けることができます。ヒープにn個のノードが含まれている場合、ceil(n / 2)リーフがあります。 最大ヒープは完全なバイナリツリーであるため、配列で表すことができます。このようなヒープでは、最初のリーフはfloor(n / 2)インデックスの後に存在します。したがって、この例では、最初の休暇はインデックス5に存在します。 アルゴリズム 以下のアルゴリズムを使
-
コイン交換のためのPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − N枚のコインが与えられ、Sに各値が無限に供給されるように、それらのコインを変更したいと考えています。順序に関係なく、変更できる方法がいくつあるかを表示する必要があります。 動的計画法の概念を使用して問題ステートメントを解決し、時間の複雑さを軽減します。 次に、以下の実装のソリューションを見てみましょう- 例 # dynamic approach def count(S, m, n): # base case table = [[0 for x in