HDU 1284 錢幣兌換問題(遞迴)

2021-07-10 02:11:07 字數 762 閱讀 9026

題目:

**:

#define maxsize 32768

int cnt[maxsize][4];

int partition(int n, int m)

if (1 > m || 1 > n)

if (1 == m || 1 == n)

if (n < m)

if (n == m)

return cnt[n][m] = partition(n, m - 1) + partition(n - m, m);}

int main()

return 0;

}

分析:第一種是通過遞迴實現:

今天剛從《妙趣橫生的演算法》看到整數的劃分數的遞迴演算法。

以下是歸納出來的遞迴函式式:

設標記p(n, m)表示正整數n的所有不同劃分中,最大加數不大於m的劃分個數。

[  1             m = 1;

p(n, m) = [  p(n, n)          n < m;

[  1 + p(n, n-1)       n = m;

[  p(n, m-1) + p(n-m, m)  n > m > 1.

由於本題已經對m作出限制(m ≤3),所以要對上訴遞迴函式式作些修改

p(n, m) = 1 + p(n, n-1)  n = m;  修改為  p(n, m) = m  n = m;  因為m = 1,只有一種方案;m = 2, 2種;m = 3,3種。

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