HDU 1284 錢幣兌換問題 全然揹包 入門題

2022-07-27 16:18:13 字數 847 閱讀 5929

hdu 1284 錢幣兌換問題(全然揹包:入門題)

題意

:

在乙個國家僅有1分,2分。3分硬幣,將錢n (n<32768) 兌換成硬幣有非常多種兌法。

請你程式設計序計算出共同擁有多少種兌法。

分析

:基礎的全然揹包問題

.

本題限制條件是: 金錢總數<=n.

本題目標條件是: 求構造方法數目.

令dp[i][j]==x 表示用前i種硬幣構造j 美分共同擁有x種方法.

初始化:  dp為全0且dp[0][0]==1.

狀態轉移: dp[i][j] = sum( dp[i-1][j] , dp[i][j-val[i]])

sum是求和, val[i]是第i種硬幣的面值. 上述方程 前者是指第i值硬幣乙個都不選, 後者是指至少選1個第i種硬幣.

終於所求: dp[3][n]. 程式用的滾動陣列實現, 所以dp僅僅有[j]這一維.

ac**:

#include#include#includeusing namespace std;

const int maxn=40000+5;

int n;

long long dp[maxn];

int main()

{ //初始化

memset(dp,0,sizeof(dp));

dp[0]=1;

//遞推

for(int i=1;i<=3;i++)

for(int j=i;j

hdu 1284 錢幣兌換

主題思想 這題有兩種主流思路 母函式方法,和動態規劃方法。先說母函式方法,母函式方法,模擬多項式乘法,這裡,有個技巧就是,利用陣列下標表示多項式指數。模擬 1 x x 2 x 3 x 4 1 x 2 x 4 x 6 1 x 3 x 6 x 9 由於是n是有限制的,所以開闢n 1大小的陣列,模擬乘法。...

HDU 1284錢幣兌換

這個是完全揹包的基礎題,模擬換錢,剛開始狀態方程寫錯了,我直接寫dp i dp i 1 dp i 2 dp i 3 然後想了想感覺太大了,不太對,後來看網上的 看著兩層for迴圈,基本是一樣的,為什麼我的不對啊,然後手工模擬了乙個小例子,發現,這種狀態轉移方程算重了,多加了好多重複的,因為完全揹包和...

hdu 1284 錢幣兌換問題

problem description 在乙個國家僅有1分,2分,3分硬幣,將錢n兌換成硬幣有很多種兌法。請你程式設計序計算出共有多少種兌法。input 每行只有乙個正整數n,n小於32768。output 對應每個輸入,輸出兌換方法數。sample input 2934 12553 sample ...