• 母函数


    以几个几克砝码为例

    1+x^2+x^4表示有2个2g砝码

    1+x^3+x^6表示2个3g砝码

    1+x^3+x^6+ x^9表示有3个3g砝码

    问这些砝码有几种不一样的重量

     f ( x ) = (1+x^2+x^4)×(1+x^3+x^6)×(1+x^3+x^6+ x^9)

    得出结果有几个x就有几种不一样的重量

    hdu2082典型的母函数问题

    代码如下

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    
    int main() {
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        int N;
        scanf("%d",&N);
        LL a[60], b[60];//存放的是系数
        while(N--) {
            int num;
            int i, j, k;
            for(i = 0; i <= 60; i++) {
                a[i] = b[i] = 0;
            }
            a[0] = 1;
            for(i = 1; i <= 26; i++) {
                scanf("%d",&num);
                if(num == 0) continue;
                for(j = 0; j <= 50; j++)//这两个for比较关键k*i+j,j,i代表的是指数
                    for(k = 0; k <= num && k*i+j <= 50; k++)
                        b[k*i+j] += a[j];
                for(j = 0; j <= 50; j++) {
                    a[j] = b[j];
                    b[j] = 0;
                }
            }
            LL total = 0;
            for(int i = 1; i <= 50; i++) 
                total += a[i];
                printf("%lld
    ",total);
        }
        return 0;
    }

    整数的拆分的母函数代码

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    
    int main() {
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        int N;
        while(scanf("%d",&N) != EOF ) {
            LL a[60], b[60];//存放的是系数
            int i, j, k;
            for(i = 0; i <= N; i++) {
                a[i] = 1;
                b[i] = 0;
            }
            for(i = 2; i <= N; i++) {
                for(j = 0; j <= N; j++)//这两个for比较关键k*i+j,j,i代表的是指数
                    for(k = 0; k*i+j <= N; k++)
                        b[k*i+j] += a[j];
                for(j = 0; j <= N; j++) {
                    a[j] = b[j];
                    b[j] = 0;
                }
            }
            printf("%lld
    ",a[N]);
        }
        return 0;
    }
  • 相关阅读:
    WPF应用程序中获取参数
    访问远程oracle数据库时TNS操作超时
    VS2010不能引用System.Data.OracleClient解决方法
    Windows系统下完全卸载Oracle
    创建WPF单实例应用程序
    Winform 版本信息
    SQL Date Time format
    Union合并数组(去掉重复的项目)
    SQL数据类型nchar,char,varchar与nvarchar区别
    Sql语句 生日提醒
  • 原文地址:https://www.cnblogs.com/creativepower/p/6802423.html
Copyright © 2020-2023  润新知