存在這樣乙個陣列, 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結束。輸出該面額有幾...