hdu1398 普通母函数的应用 解决多重集组合问题

  这个题的意思是给你1^2 2^2 3^2 ... 17^2这17个数, 为你组成i的方案数有多少个, 可以通过普通母函数来求解, 系数就代表方案数, (1+x+x^2+...x^300)(1+x^2+)..., 代码如下:

#include <iostream>
#include <algorithm>

using namespace std;
int num1[300+10], num2[300+10];

void init()
{
    for(int i=0; i<=300; i++)
        num1[i]=1, num2[i]=0;
    for(int i=2; i<=17; i++)
    {
        for(int j=0; j<=300; j++)  //aj*x^j * x^k
            for(int k=0; k+j<=300; k+=i*i)
                num2[j+k] += num1[j];
        for(int i=0; i<=300; i++)
            num1[i]=num2[i], num2[i]=0;
    }
}

int main()
{
    init();
    int n;
    while(cin>>n)
    {
        if(n==0) break;
        cout<<num1[n]<<endl;
    }
    return 0;
}
时间: 2024-12-24 08:29:42

hdu1398 普通母函数的应用 解决多重集组合问题的相关文章

用itertools解决无序排列组合问题

最近我作为Python菜鸟一枚开始征战Codewars,所以打算在这里记下遇到的有意思的题目.今天这第一题叫做"Best Travel": John和Mary计划去一些小镇旅行.Mary已经列好了这些小镇之间的距离比如ls=[50, 55, 57, 58, 60].但是John不想开车太累,所以提出了两个要求:1) 开车不超过某个距离比如t=174 miles 2) 只能去3个小镇. 选择哪3个小镇可以让John和Mary都满意呢?(即找到距离之和最接近或等于t的3个小镇) 这道题目可

(回溯法)解决一系列组合问题

题目一: Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For example, If n = 4 and k = 2, a solution is: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 给你两个整数 n和k,从1-n中选择k个数字的组合.比如n=4,那么从1,2,3,4中选取两个数字的组合 解题思路:htt

python解决排列组合

笛卡尔积:itertools.product(*iterables[, repeat]) import itertools for i in itertools.product('BCDEF', repeat = 2): print(''.join(i),end=",") print('\n') # 输出 BB BC BD BE BF CB CC CD CE CF DB DC DD DE DF EB EC ED EE EF FB FC FD FE FF 两个元组进行笛卡尔积: impo

一个货币组合的问题(二)——母函数解法

10月23号的时候,写了用递归和动态规划的方式解决货币组合的方法(见<一个货币组合的问题>) 这两天看到<组合数学>中,使用母函数(生成函数)解决排列组合问题的方法,觉得可以用在货币组合问题上.试验了一下,果然可以. (这里空出,详细地写一下母函数的方法,加深自己的理解.) 代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define MAXITEMS 128 5 6 int v[6] = {1,

算法总结之母函数

1.概念 生成函数即母函数,是组合数学中尤其是计数方面的一个重要理论和工具.生成函数有普通型生成函数和指数型生成函数两种,其中普通型用的比较多.形式上说,普通型生成函数用于解决多重集的组合问题,而指数型母函数用于解决多重集的排列问题.母函数还可以解决递归数列的通项问题(例如使用母函数解决斐波那契数列的通项公式). 2.组合问题中的应用 先放两句百度百科上的原话: 1.“把组合问题的加法法则和幂级数的乘幂对应起来” 2.“母函数的思想很简单 — 就是把离散数列和幂级数一 一对应起来,把离散数列间的

hdu2082 找单词 (母函数)

找单词 题意: 中文题,考虑是不是要写个英文题意..(可惜英语水平不够  囧rz)                (题于文末) 知识点: 母函数(生成函数): 生成函数有普通型生成函数和指数型生成函数两种(本题是普通型). 形式上,普通型母函数用于解决多重集的组合问题, 指数型母函数用于解决多重集的排列问题. 母函数还可以解决递归数列的通项问题(例如使用母函数解决斐波那契数列,Catalan数的通项公式). 普通母函数: 构造母函数G(x), G(x) = a0 + a1*x + a2* + a

HDU2082母函数模板题

找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5782    Accepted Submission(s): 4062 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找

HDU-2082(母函数)

找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2739    Accepted Submission(s): 1941 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找

菜鸟授徒系列之母函数

这是第二次接触母函数类问题,相比于第一次的朦朦胧胧,第二次更加深刻.深深地感到母函数的强大,真是解决组合问题的一大法宝,将做过的题分类.总结加深一下记忆. 母函数包括:  普通生成函数(解决组合问题) 指数生成函数(解决排列问题) 这里全部是普通生成函数,可解决一系列组合问题,做题时要将题意与生成函数 G(x) = (1+x^2+x^3+x^4....) (1+x^2+x^4+....) (1+x^3+x^6+.....)······.相结合. 母函数模板包括三重循环:第一重指除第一个括号外的括