总结的不错的博客   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
hdu 1028

相关文章:

  • 2021-09-01
  • 2021-11-03
  • 2021-11-06
  • 2022-01-23
  • 2021-12-11
  • 2021-07-24
猜你喜欢
  • 2021-06-10
  • 2022-12-23
  • 2021-11-03
  • 2022-02-03
  • 2022-01-05
  • 2022-12-23
  • 2021-11-03
相关资源
相似解决方案