1. 程式人生 > >動態規劃---紙幣組合問題

動態規劃---紙幣組合問題

題目:假設銀行裡一共有n種硬幣,第一種硬幣的價值為V1。假設想把k元兌換成零錢,一共有多少種兌換方案。

例如,一共有1,2,5三種硬幣,k = 5,則有以下兌換方案:11111,1112,122,5。共有4中兌換方案。

 動態規劃問題最重要的是要找到狀態轉移方程!!!
用dp[i][sum]表示使用前i種硬幣來組合sum這些錢有多少種兌換方案。那麼

dp[i][sum] = dp[i-1][sum - 0*Vi] + dp[i-1][sum-1*Vi]+...+dp[i-1][sum-k*Vi]

其中k = sum / Vi
理解:拿sum=6,i=3來解釋一下。其中V1=1,V2=2,V3=5,也就是Vi=5。而dp[3][6]就等於在不使用5這個硬幣的時候有多少種組合方式加上使用一個5硬幣有多少種組合方式。因為sum=6,最多隻能有一個5硬幣,所以k=1。

程式碼如下

int coinCombinations(int coins[], int coinKinds, int sum)
{
    vector<vector<int> > dp(coinKinds + 1, vector<int>(sum + 1, 0));

    for (int i = 0; i <= coinKinds; ++i)    //遞推初始條件
    {
        dp[i][0] = 1;
    }
    for (int i = 1; i <= coinKinds; ++i)
    {
        for
(int j = 1; j <= sum; ++j) { //j / coins[i-1]表示能取的該硬幣的最大數量。 //j / coins[i-1]是理解這道題的關鍵所在 for (int k = 0; k <= j / coins[i - 1]; ++k) //i-1是因為coins是從0開始算起的。 { dp[i][j] += dp[i - 1][j - k * coins[i - 1]]; } } } return
dp[coinKinds][sum]; }

相關推薦

動態規劃---紙幣組合問題

題目:假設銀行裡一共有n種硬幣,第一種硬幣的價值為V1。假設想把k元兌換成零錢,一共有多少種兌換方案。 例如,一共有1,2,5三種硬幣,k = 5,則有以下兌換方案:11111,1112,122,5。共有4中兌換方案。  動態規劃問題最重要的是要找到狀態

2017烏魯木齊區域賽A(動態規劃組合數學,期望)

ble set 可能 組合 name main i++ return soft #include<bits/stdc++.h>using namespace std;double c[110][110];double g[110];double dp[110]

動態規劃-硬幣組合數目

import java.util.Scanner; /* * 硬幣的型別有1角,2角,5角,給定一個數額n,多少種組合方式 */ //暴力解法 public class CashNum {

動態規劃-硬幣組合

1.問題描述        對於m個面值為v1,v2,vm的硬幣,組成錢數n,不限制硬幣的數量和位置,求這些硬幣,最多有多少種組合的結果剛好等於n。2.分析     n=x1*v1+x2*v2+....+xm*vm,{x1,x2,....,xm}就是其中的一種組合,定義l[i

動態規劃:數字組合

描述 有n個正整數,找出其中和為t(t也是正整數)的可能的組合方式。如: n=5,5個數分別為1,2,3,4,5,t=5; 那麼可能的組合有5=1+4和5=2+3和5=5三種組合方式。 輸入 輸入的第一行是兩個正整數n和t,用空格隔開,其中1<=n<=20,

bzoj 2281: [Sdoi2011]黑白棋 博弈論+動態規劃+排列組合

題意 小A和小B又想到了一個新的遊戲。 這個遊戲是在一個1*n的棋盤上進行的,棋盤上有k個棋子,一半是黑色,一半是白色。 最左邊是白色棋子,最右邊是黑色棋子,相鄰的棋子顏色不同。 小A可以移動白

9.9遞歸和動態規劃(六)——打印n對括號的所有有效組合(即左右括號正確配對)

思路 即使 情況 else 字符 ram 配對 字符串 pop /** * 功能:打印n對括號的所有有效組合(即左右括號正確配對)。 */ 兩種方法: 方法一: /** * 思路:在括號的最前面或者原有的每對括號中面插入一對括號。至於其它

【BZOJ4559】[JLoi2016]成績比較 動態規劃+容斥+組合數學

desc return char 條件 long long 暴力 inline etc sin 【BZOJ4559】[JLoi2016]成績比較 Description G系共有n位同學,M門必修課。這N位同學的編號為0到N-1的整數,其中B神的編號為0號。這M門必

【BZOJ3294】放棋子(動態規劃,容斥,組合數學)

ref efi amp 顏色 直接 using .org bzoj mat 【BZOJ3294】放棋子(動態規劃,容斥,組合數學) 題面 BZOJ 洛谷 題解 如果某一行某一列被某一種顏色給占了,那麽在考慮其他行的時候可以直接把這些行和這些列給丟掉。 那麽我們就可以寫出一個

BZOJ2339 HNOI2011卡農(動態規劃+組合數學)

ios code con fine getchar() amp 偶數 name []   考慮有序選擇各子集,最後除以m!即可。設f[i]為選i個子集的合法方案數。   對f[i]考慮容斥,先只滿足所有元素出現次數為偶數。確定前i-1個子集後第i個子集是確定的,那麽方案數為

BZOJ3997 TJOI2015組合數學(動態規劃

cst tjoi2015 while \n nbsp 合數 zoj code stdout   copy:   Dilworth定理:DAG的最小鏈覆蓋=最大點獨立集 最小鏈覆蓋指選出最少的鏈(可以重復)使得每個點都在至少一條鏈中   最大點獨立集指最大的集合使集合中任意兩

BZOJ4584 APIO2016賽艇(動態規劃+組合數學)

  如果值域不大,容易想到設f[i][j]為第i個學校選了j的方案數,列舉上一個學校是哪個選了啥即可,可以字首和優化。於是考慮離散化,由於離散化後相同的數可能可以取不同的值,所以列舉第一個和其所選數(離散化後)相同的學校是哪個,考慮這一段裡選幾個學校怎麼選數,組合數即可。各種顯然的優化後即可做到O(n3),瞎

Codeforces 1060F Shrinking Tree - 動態規劃 - 組合數學

題目傳送門   傳送門I   傳送門II   傳送門III 題目大意   給定一棵$n$個點的帶標號樹,不斷執行以下操作: 等概率選取一條邊 刪掉這條邊的它的兩個端點 新建一個點和之前與這兩個點鄰接的點連邊,它的標號從這兩個被刪去的點中等概率選取。

Codeforces 840C On the Bench - 動態規劃 - 組合數學

題目傳送門   傳送門I   傳送門II   傳送門III 題目大意   給定$n$個數,我們認為它們互不相同,即使它們數值上相等,問存在多少排列方式,使得任意兩個相鄰位置上的數的乘積不是完全平方數。   顯然一個正整數$x$可以被表示為$d_{1}\cdot s_{1}^

P1759 通天之潛水(不詳細,勿看)(動態規劃遞推,組合揹包,洛谷)

題目連結:點選進入 題目分析: 簡單的組合揹包模板題,但是遞推的同時要重新整理這種情況使用了哪些物品 ac程式碼: #include<bits/stdc++.h> using namespace std; int weigh[101],zhu[101],t[101]; stru

P1759 通天之潛水(不詳細,勿看)(動態規劃遞推,組合背包,洛谷)

規劃 .org turn 分析 student false number 找到 div 題目鏈接:點擊進入 題目分析: 簡單的組合背包模板題,但是遞推的同時要刷新這種情況使用了哪些物品 ac代碼: #include<bits/stdc++.h> u

資料結構與演算法---動態規劃( 9宮格數字序列對應的字母組合)

const assert = require('assert'); /** * 9宮格數字序列對應的字母組合 * @param digits */ function letterCombinations(digits) { const letterM

錢幣組合問題(動態規劃

錢幣組合問題:(每種硬幣不限次數) 假設我們有8種不同面值的硬幣{1,2,5,10,20,50,100,200},用這些硬幣組合夠成一個給定的數值n。例如n=200,那麼一種可能的組合方式為200 = 3 * 1 + 1*2 + 1*5 + 2*20 + 1 * 50 +

Codeforces Round #340 (Div. 2) (629A,629B,629C(排列組合動態規劃),629D(線段樹))

Far Relative’s Birthday Cake 題目連結: 解題思路: Consider that we have rowi chocolates in the i'th row and coli chocolates in the i'th colum

動態規劃】硬幣面值組合(上臺階)

問題 1分2分5分的硬幣三種,組合成1角,共有多少種組合? 有1分,2分,5分,10分四種硬幣,每種硬幣數量無限,給定n分錢,有多少中組合可以組成n分錢? 一個人上臺階可以一次上1個,2個,或者3個,問這個人上n層的臺階,總共有幾種走法? 問法不一樣,但是