HDU 1284 錢幣兌換問題 (數學)

2021-07-10 01:37:26 字數 599 閱讀 1677

題目:

**:

#include using namespace std;

int main()

{ int n,sum,i;

while (cin>>n)

{ for (i=0,sum=0;i<=n/3;i++)

sum+=(n-3*i)/2+1;

cout<

i 是列舉3分硬幣的個數

當有i個3分硬幣的時候,2分硬幣可以有0,1,2…(n-3*i)/2個,共(n-3*i)/2+1

種,3分硬幣和2分硬幣個數確定了,1分硬幣就確定了啊。

第二種通過數學方法實現:

設兌換成1分,2分,3分分別x, y, z個,等到乙個等式:n = 1 * x + 2 * y + 3 * z;

那麼,全是1分的只有一種;

那麼,再來計算含有3分的,在一次兌換中,最多有uplimit = n / 3個3分錢幣(向下取整),如n = 5,最多含1個3分,又如n = 7,則最多含2個;

那麼,我們列舉3分錢幣數從0個到uplimit個的情況:由於已經兌換掉i個3分錢幣,所以要從總數中減去已兌換的錢,剩下的錢可以兌換2分錢幣個數為((n - i * 3) / 2。

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