零錢組合的幾種解法

2021-07-05 09:33:36 字數 1168 閱讀 9981

存在這樣乙個陣列, int arr[100]=; 裡面是各種零錢的金額,我們還假設每一種零錢都有無數種,請問這些金錢組成乙個特定面額數值的組合數。

比如 要組成1元,則情況為

5   10   25   1

0     0      0    10

0     1     0      0

1     0     0      5

2    0      0     0

一共四種可能,我們可以看到,如果只有五元的時候,其最大數目為10/5=2,如果只有一張10元,最大數目為10/10=1,如果只有一張1元,最大數目為10/1=10,而我們這裡有四種面額的零錢,那該怎麼辦?

使用深度搜尋。

首先寫出來這個問題的簡單遞迴形式。

這個遞迴形式可以有兩個版本

第乙個是每次組合的時候,如果加到我們要的數額,就把全域性變數自增,第二種原理是每次遞迴到邊界返回,然後檢查aim是否為0,如果是0,則代表本元素,或者以前的元素,已經累加到我們要求的值了,返回1,如果非0,則代表還「剩了點」,這樣的話證明這個組合不符合,要返回重新遞迴,返回0.

版本1#include #include #include #include using namespace std;

int arr[100]=;

int numcount=0;

void fun(int arr,int index,int aim)

if(index==4)

for(int i=0;i*arr[index]<=aim;i++)

}int main()

;int fun(int arr,int index,int aim)

for(int i=0;i*arr[index]<=aim;i++)

return ret;

}int main()

;int record[3][1000];

int fun(int arr,int index,int aim)

if(index==4)

for(int i=0;i*arr[index]<=aim;i++)

record[index][aim]=ret;

return ret;

}int main()

{ memset(record,0,sizeof(record));

cout<

湊零錢問題 多種解法 遞迴 動態規劃

題 給你 k 種 值的硬幣,值分別為 c1,c2 ck 每種硬 幣的數量 限,再給 個總 額 amount 問你最少需要 枚硬幣湊出這個 額,如果不可能湊出,演算法返回 1。coding utf 8 created on wed mar 3 14 14 19 2021 author dujidan ...

換零錢 動態規劃解法 C語言描述

已知有三種人民幣,分別為1元 2元 5元。求10元可以有多少種換成上述三種零錢的方法 不限制每種人民幣的數量 設有a種面值的人民幣,設總 為b,取a種面值中的一種,設其面值為d,則有 使用a種面值將總 b換取零錢的方法數量 使用a種面值將總 b d 換取零錢的方法數量 使用 a 1 種面值將總 b換...

找零錢問題

問題描述 我們知道人民幣有1 2 5 10 20 50 100這幾種面值。現在給你n 1 n 250 元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。比如4元,能用4張1元 2張1元和1張2元 2張2元,三種表示方法。輸入有多組,每組一行,為乙個整合n。輸入以0結束。輸出該面額有幾...