hdu 1284 錢幣兌換

2021-08-08 19:18:45 字數 1031 閱讀 5773

主題思想: 這題有兩種主流思路: 母函式方法,和動態規劃方法。

先說母函式方法,母函式方法,模擬多項式乘法,這裡,有個技巧就是,利用陣列下標表示多項式指數。

模擬 (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大小的陣列,模擬乘法。

int a[maxn];

int b[maxn];

for(int i=0;i

i++) a[i]=1,b[i]=0;

for(int i=2;i

<=3;i++)

for(int j=0;j

j++)

}

動態規劃,看作是完全揹包問題,因為是允許重複的,所以可以看作是完全揹包問題,且是沒有價值的,這就簡化了狀態轉移方程,完全揹包本來的狀態轉移方程是

for(int i=0;ifor(int v=c[i];v<=v;v++)

}

這裡value[i]=0; c[i]=i; 且求得不是最大值,而是方案總數。所以最終的狀態轉移方程是

dp[v]=sum(dp[v],dp[v-i]); sum 表示求和操作。

動態規劃**:

void init()

}}

ac**:

#include 

#include

#include

using

namespace

std;

const

int maxn=32800;

long

long sum(long

long x,long

long y)

long

long dp[maxn];

void init()

}}int main()

return

0;}

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 ...

HDU 1284 錢幣兌換問題

題意 在乙個國家僅有1分,2分,3分硬幣,將錢n兌換成硬幣有很多種兌法。請你程式設計序計算出共有多少種兌法。分析 可以用母函式,也可以用dp dp n m 表示錢n用前m種硬幣的兌換方式 1 m 1 dp n,m dp n,n n m 1 dp n,n 1 n m dp n,m 1 dp n m,m...