1. 程式人生 > >用1元,2元,5元,10元,20元,50元組合成100元

用1元,2元,5元,10元,20元,50元組合成100元

100元換零錢1元,2元,5元,10元,20元,50元有多少種組合方案

一道筆試題,當時就懵逼了。。。 找到遞推公式之後,其實也不難 F(N,M)=F(N,M-1)+F(N-VAL[M],M) F(N,M)表示 用不超過第M個值的數來表示N 的所有組合方案
舉個栗子 我們先看4的組成 4 = 2+2 = 2+1+1 = 1+1+1+1共3種方案 我們再看公式,例如
F(4,6)= F(4,5) + F(4-VAL[6],6)  = F(4,5) + F(4-50,6) = F(4,5) + F(-46,6) = F(4,5) F(4,5)= F(4,4) + F(4-VAL[5],5)  = F(4,4) + F(4-20,5)
= F(4,4) + F(-16,5) = F(4,4) F(4,4)= F(4,3) + F(4-VAL[4],4)  = F(4,3) + F(4-10,4) = F(4,3) + F(-6,4) = F(4,3) F(4,3)= F(4,2) + F(4-VAL[3],3)  = F(4,2) + F(4-5,3) = F(4,2) + F(-1,3) = F(4,2) F(4,2) = F(4,1) + F(4-VAL[2],2)     = F(4,1) + F(4-2,3) = F(4,1) + F(2,3) = F(4,1) + F(2,3) F(4,6) 的所有組合方案其實就是F(4,2)的組合方案,畢竟VAL[3]~VAL[6]均大於4,不可能存在更多的組合方案,
所以,
用不超過第6個值的數(即50元)來表示4元 的所有組合方案【F(4,6)】
等於  用不超過第2個值的數(即2元)來表示4元 的所有組合方案【F(4,2)】 那麼, 用不超過第2個值的數(即2元)來表示4元 的所有組合方案【F(4,2)】
又等於 用不超過第1個值的數(即1元)來表示4元 的所有組合方案  加上  用不超過第3個值的數(即5元)來表示2元 的所有組合方案【F(4,1)+F(2,3)】 明顯F(4,1)所代表的方案就是4=1+1+1+1,即F(4,1)=1
而F(2,3)也可以用上述推導的方式,即F(2,3)=F(2,2)=F(2,1)+F(0,2)=....=F(2,1)+F(0,0)=2
F(0,0)可以理解成用0元來表示0元,這算是1種方案
此時我們就能看出4的組合方案,其實就是 4=2+2 4=2+1+1 【F(4-VAL[2],2),意味著把紅色數字減去 ,即F(2,2)代表上面兩種方案
4=1+1+1+1 【F(4,1)代表4=1+1+1+1方案】 程式碼如下:
int main()
{
	int val[7] = { 0,1,2,5,10,20,50 };
	int f[101][7];
	memset(f, 0, sizeof(f));

	for (int j = 0; j <= 6; j++)
		f[0][j] = 1;
	
	for (int j = 1; j <= 6; j++)
	{
		for (int i = 1; i <= 100; i++)
		{
			if (i - val[j] < 0)
				f[i][j] = f[i][j - 1];
			else
				f[i][j] = f[i - val[j]][j] + f[i][j - 1];
		}
	}


	//cout << test(0, 100) << endl;
	//cout << ans << endl;
	cout << f[100][6] << endl;
	system("pause");
	return 0;
}


相關推薦

1251020,50合成100

100元換零錢1元,2元,5元,10元,20元,50元有多少種組合方案 一道筆試題,當時就懵逼了。。。 找到遞推公式之後,其實也不難 F(N,M)=F(N,M-1)+F(N-VAL[M],M)

c語言 對10個數元素依次賦值為0 1 2 3 4 5 6 7 8 9要求按逆序輸出

                對10個數組元素依次賦值為0,1,2,3,4,5,6,7,8,9,要求按逆序輸出。 解:程式:

5年後、10年後你希望自己是個什麼樣的人?

5 年後、10 年後,你想成為什麼樣的自己?你認真思考過這個問題嗎? 可能你思考過這個問題,但一直沒有給自己一個明確的答案,也可能你從來沒想過這個問題。這都很正常,畢竟我們都太容易陷入一日復一日的漩渦裡。每天早上起來乘一樣的交通工具行一樣的路去工作,做一樣的事情;下班行一樣的路回家,做一樣的事情;閒

4.2.3 程式設計題《將一筆錢換算成1分、2分和5分的硬幣組合》

將一筆錢(大於8分,小於1元,精確到分)換算成1分、2分和5分的硬幣組合。輸入金額,問有幾種換算方法?要求每種硬幣至少有一枚。【輸入形式】從鍵盤輸入一個正整數n。【輸入輸出樣例1】(下劃線部分表示輸入)Input money: 10count=2【樣例說明】輸入提示符後要加一

沃爾沃最牛SUV來了比奧迪Q5霸氣10動力完爆奔馳GLC

中國 內容 自主 很多 發展 detail 吉利 習慣 tail ---恢復內容開始--- 作為和自主品牌結合後發展最成功的豪華品牌,非沃爾沃莫屬了。我們知道,在吉利的造車理念引導下,沃爾沃完美融入了中國汽車文化,他的很多設計風格都非常順應國人的審美習慣。而在今年的成都車

男人不想打工一輩子再忙也要讀這10本書提高情商智商

作為一個男性,在社會總要承擔很多很多,來自於家庭,社會的壓力,常常讓人喘不過氣來,而作為家庭的主心骨,我們必須養家餬口,因為你不努力,沒人替你撐住這片天。 是啊,男人太累了,但是身為男人,累是不能抱怨的,因為這就是我們的責任,身為男人就要努力去拼搏,為自己為家人贏得一份幸福感,相信每一個真男人都有

125102050的紙幣組成100共有多少種情況

  static void Main(string[] args)        {            int count = 0;            //1元組成的情況,最多有100種            for (int a = 0; a <= 100;

程式設計實現 125100紙幣組成800共有多少種情況。?

#include <iostream> using namespace std; void main() { //int[] a={1,2,5,10,20,50};

C#練習 找零人民幣有1005010521六種最少需要準備多少張人民幣

Console.WriteLine("輸入工資"); int money = Convert.ToInt32(Console.ReadLine()); i

Linux 7個運行級別(0:關機,停機模式、1:單戶模式、2:多用戶模式、3:完整的多用戶文本模式、4:系統未使用保留一般不用、5:圖形化模式、6:重啟模式)、重置root密碼方法

oca alt 開機重啟 正常 說明 特殊情況 其中 ice root權限 init是Linux系統操作中不可缺少的程序之一。init進程,它是一個由內核啟動的用戶級進程。內核會在過去曾使用過init的幾個地方查找它,它的正確位置(對Linux系統來說)是/

一列數字的規則如下;112358132134........ 求第30位數字是多少遞規和非遞迴兩種方法演算法實現

斐波納契數列(Fibonacci Sequence),又稱黃金分割數列。在數學上,斐波納契數列以如下被以遞迴的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,現在我從演算法的角度,利用遞迴和非

喝汽水1瓶汽水12個空瓶可以換一瓶汽水20可以多少汽水

程式碼直接奉上 #include<stdio.h> int main() { int cash = 20; int total =cash ; int empty = cash; while(empty > 1) { total += empty

喝汽水1瓶汽水12個空瓶可以換一瓶汽水20可以多少汽水。

喝汽水,1瓶汽水1元,2個空瓶可以換一瓶汽水,  給20元,可以多少汽水。  第一種方法:(非遞迴) #include<stdio.h> int main() { int total = 0; //瓶子數 int kps = 0;

n2錢買1瓶酒2個空瓶換1瓶酒4個瓶蓋換1瓶酒一共可以喝多少瓶酒?

 kris 2018-09-19 19:03:54 不存在借瓶或者蓋子哈!純數學算,python程式碼如下: money = 100 bottals = money/2 drink_bottal = bottals tops = bottals d

Gikee 資料觀 | 穩定幣TUSD增發4000萬枚BTC再獲5.2淨流入

近日來持續發酵的USDT事件在今天算是暫時告一段落,USDT和BTC的異常行情均有所落定。 USDT的資金昨天淨流出4270萬人民幣,今天開始恢復淨流入,金額為884.31萬人民幣。 而BTC繼續獲得資金淨流入,今天同一時段統計,流入的資金雖然已經有所減緩,但淨流入的金額依然

整型陣列處理演算法(十三)求出125這三個數不同個數組合的和為100的組合個數(華為校園招聘題)

寫一個程式, 要求功能:求出用1,2,5這三個數不同個數組合的和為100的組合個數。 如:100個1是一個組合,5個1加19個5是一個組合。。。。 請用C++語言寫。        下面用2中方法來

Java經典演算法集——如下:122、3、4、5這六個數字java寫一個main函式打印出所有不同的排列如:512234、412345等要求:"4"不能在第三位"3"與"5"不能相連。

轉:http://www.blogjava.net/SongJunke/articles/101741.html 演算法程式題:     該公司筆試題就1個,要求在10分鐘內作完。     題目如下:用1、2、2、3、4、5這六個數字,用java寫一個main函式,打印出所

證明N={12...n...}有最大 黃小寧

證明N={1,2,...,n,...}有最大元 黃小寧(通訊:廣州市華南師大南區9-303   510631)     5000年數學一直不知{2,3,...,n+1,...}(n的變域是N)中“深藏”有N外數。本文是文獻[1]的一

一個關於執行緒的經典面試題要求三個執行緒按順序列印1,2,3,4,5.... 71,72,73,74, 75. 執行緒1先列印1,2,3,4,5, * 然後是執行緒2列印6,7,8,9,10, 然後是

package thread; /**  *   * 一個關於執行緒的經典面試題,要求用三個執行緒,按順序列印1,2,3,4,5.... 71,72,73,74, 75. 執行緒1先列印1,2,3,4,5,  * 然後是執行緒2列印6,7,8,9,10, 然後是執行緒3列印