主題思想: 這題有兩種主流思路: 母函式方法,和動態規劃方法。
先說母函式方法,母函式方法,模擬多項式乘法,這裡,有個技巧就是,利用陣列下標表示多項式指數。
模擬 (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...