1. 程式人生 > >HDU 1284 錢幣兌換問題(普通型 數量無限的母函數)

HDU 1284 錢幣兌換問題(普通型 數量無限的母函數)

input java bmi strong 國家 。。 clu author 組合數

傳送門:

http://acm.hdu.edu.cn/showproblem.php?pid=1284

錢幣兌換問題

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12335 Accepted Submission(s): 7453


Problem Description 在一個國家僅有1分,2分,3分硬幣,將錢N兌換成硬幣有很多種兌法。請你編程序計算出共有多少種兌法。

Input 每行只有一個正整數N,N小於32768。

Output 對應每個輸入,輸出兌換方法數。

Sample Input 2934 12553

Sample Output 718831 13137761

Author SmallBeer(CML)

Source 杭電ACM集訓隊訓練賽(VII) 分析: 母函數分為兩類 普通型求組合數:數量有限普通型,數量無限普通型 指數型求排列數 本題: 數量無限的普通型母函數: 模板題 自己對母函數的研究還很淺,只會套這種簡單模板。。 加油,多刷題 code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define max_v 32768 int c1[max_v]; int c2[max_v]; int main() { for(int i=0;i<max_v;i++) { c1[i]=1; c2[i]=0; } for(int i=2; i<=3; i++) { for(int j=0; j<max_v; j++) { for(int y=0; y+j<max_v; y+=i) { c2[j
+y]+=c1[j]; } } for(int j=0; j<max_v; j++) { c1[j]=c2[j]; c2[j]=0; } } int x; while(~scanf("%d",&x)) { printf("%d\n",c1[x]); } return 0; }

HDU 1284 錢幣兌換問題(普通型 數量無限的母函數)