总结的不错的博客 https://www.cnblogs.com/icodefive/p/4578530.html
重要公式
图片来源 https://blog.csdn.net/qq_41357771/article/details/83449481
来源于百度
(一)普通型母函数
1. 经典问题 我有1元 2元 5元的硬币无限个 我如果要组成n元 有多少种方案
(1) 解决方法很多
(2) 母函数解决方法 构建母函数 (1+x+x2+x3+....+xn)*(1+x2+x4+x6+....+x2n)*(1+x5+x10+x15+...+x5n)
求出这个多项式 a0+a1x1 +a2x2+.......anxn 拼成 n元的方案就是an个
2. hdu 1028 (和上述问题差不多)
#include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=1e2+50; int a[maxn][maxn]; int ans[maxn]; int main(){ int n; while(~scanf("%d",&n)){ for(int i=1;i<=n;i++){ for(int j=0;j<=n;j+=i){ a[i][j]=1; } } for(int i=1;i<=n;i++){ if(i==1){ for(int j=0;j<=n;j++){ ans[j]=a[i][j]; } } else { for(int j=0;j<=n;j++){ a[i-1][j]=ans[j]; ans[j]=0; } for(int j=0;j<=n;j++){ for(int k=0;k<=n;k++){ if(j+k>n) continue; ans[j+k]+=a[i-1][j]*a[i][k]; } } } } printf("%d\n",ans[n]); for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++) a[i][j]=0; ans[i]=0; } } } hdu 1028