母函数 入门习题

HDU.1028.Ignatius and the Princess III(母函数)

//0MS 1500K
//母函数。。背包、DP都行。。
#include <cstdio>
#include <cstring>
typedef long long LL;
const int N=122;

int n,f[N],tmp[N];

int main()
{
    while(~scanf("%d",&n))
    {
        memset(f,0,sizeof f), f[0]=1;//or 离线,对n排序。
        for(int i=1; i<=n; ++i) f[i]=1;
        for(int i=2; i<=n; ++i)
        {
            memset(tmp,0,sizeof tmp);
            for(int j=0; j<=n; ++j)
                for(int k=0; j+k<=n; k+=i)
                    tmp[j+k]+=f[j];
            memcpy(f,tmp,sizeof f);
        }
        printf("%d\n",f[n]);
    }
    return 0;
}

HDU.1398.Square Coins(母函数)

//0MS 1512K
#include <cstdio>
#include <cstring>
const int N=303;

int n,f[N],tmp[N]; //平方数。。实际方案数也不是那么多。

void Init()
{
    n=300;//N=300不是17*17。。
    for(int i=0; i<=n; ++i) f[i]=1;
    for(int i=2; i<=17; ++i)
    {
        memset(tmp,0,sizeof tmp);
        for(int j=0; j<=n; ++j)
            for(int k=0; j+k<=n; k+=i*i)
                tmp[j+k]+=f[j];
        memcpy(f,tmp,sizeof f);
    }
}

int main()
{
    Init();
    while(scanf("%d",&n),n) printf("%d\n",f[n]);
    return 0;
}

HDU.1085.Holding Bin-Laden Captive!(母函数)

//46MS 1572K
#include <cstdio>
#include <cstring>
#include <algorithm>
const int N=8008,v[5]={0,1,2,5};

int n,f[N],tmp[N],num[5];

int main()
{
    while(scanf("%d%d%d",&num[1],&num[2],&num[3]),num[1]||num[2]||num[3])
    {
        n=1*num[1]+2*num[2]+5*num[3];
        memset(f,0,sizeof f), f[0]=1;
        for(int las=0,nxt,i=1; i<=3; ++i)
        {
            memset(tmp,0,sizeof tmp), nxt=std::min(las+v[i]*num[i],n);
            for(int j=0; j<=las; ++j)
                for(int k=0; k<=num[i]/*&&j+k*v[i]<=nxt*/; ++k)
                    tmp[j+k*v[i]]+=f[j];
            memcpy(f,tmp,sizeof f), las=nxt;
        }
        bool flag=1;
        for(int i=1; i<=n; ++i)
            if(!f[i]) {printf("%d\n",i), flag=0; break;}
        if(flag) printf("%d\n",n+1);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/SovietPower/p/9095543.html

时间: 2024-08-07 23:14:51

母函数 入门习题的相关文章

HDU1028Ignatius and the Princess III母函数入门

这个题也可以用递归加记忆化搜索来A,不过由于这题比较简单,所以用来做母函数的入门题比较合适 以展开后的x4为例,其系数为4,即4拆分成1.2.3之和的拆分数为4: 即 :4=1+1+1+1=1+1+2=1+3=2+2 这里再引出两个概念整数拆分和拆分数: #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #in

HDU 2082 找单词 (母函数入门)

[题目链接]click here~~ [题目大意] 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的单词呢?单词的价值就是组成一个单词的所有字母的价值之和,比如,单词ACM的价值是1+3+14=18,单词HDU的价值是8+4+21=33.(组成的单词与排列顺序无关,比如ACM与CMA认为是同一个单词). Input 输入首先是一个整数N,代表测试实例的个数.

母函数 入门 + 模板

转自:母函数 入门 + 模板  感谢 在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息.使用母函数解决问题的方法称为母函数方法. 母函数可分为很多种,包括普通母函数.指数母函数.L级数.贝尔级数和狄利克雷级数.对每个序列都可以写出以上每个类型的一个母函数.构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视乎序列本身的特性和问题的类型. 这里先给出两句话,不懂的可以等看完这篇文章再回过头来看

母函数入门+模板(转)

在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息.使用母函数解决问题的方法称为母函数方法. 母函数可分为很多种,包括普通母函数.指数母函数.L级数.贝尔级数和狄利克雷级数.对每个序列都可以写出以上每个类型的一个母函数.构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视乎序列本身的特性和问题的类型. 这里先给出两句话,不懂的可以等看完这篇文章再回过头来看: 1.“把组合问题的加法法则和幂级数

母函数入门笔记(施工中&hellip;

定义:对于一个数列,它的母函数(即生成函数)为   为了对这个准确求值,我们设    举一个简单的例子 例1 对于数列 他的生成函数为 ,那么应用一下等比数列求和公式 这里由于 所以当时 那么   例2 对于数列 生成函数 就是上面那个的比例系数放大到b 那么就是 例3 对于数列 生成函数 就是比例系数放大到 可以得出 类比可以得到   例4 然后是一个很鬼的 对于数列求生成函数 我们考虑这个东西是在无限定义下的 所以等价于 例5 然后是一个稍微麻烦点的 对于数列求生成函数   然后为了把这个东

《算法竞赛入门经典》第一章 程序设计入门 习题

习题1-1 平均数(average)输入三个数,输出他们的平均值,保留3位小数. #include <stdio.h> int main() { double a, b, c; scanf("%lf%lf%lf", &a, &b, &c); printf("%.3lf", (a+b+c)/3); return 0; } 习题1-2 温度(temperature)输入华氏温度f,输出对应的摄氏温度c,保留3位小数.提示:c=5(f-

生成函数(母函数)入门详解

本文章从以上两位大佬的博客参考而来!再次感谢! 母函数,又称生成函数,是ACM竞赛中经常使用的一种解题算法,常用来解决组合方面的题目. 在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供 关于这个序列的信息.使用母函数解决问题的方法称为母函数方法. 母函数可分为很多种,包括普通母函数.指数母函数.L级数.贝尔级数和狄利克雷级数.对每个序列都可以写出以 上每个类型的一个母函数.构造母函数的目的一般是为了解决某个特定的问题,因此

母函数入门【模板】

正整数拆分 hdu1028 解: 对于正整数 $n$ 的拆分,其母函数为 $$f(x) = (1+x+x^2+...)(1+x^2+x^4+...)(1+x^3+x^6+x^9+...)...$$ 答案就是多项式展开后 $x^n$ 项的系数. Code: //其实就是模拟,从前往后一一合并 #include<bits/stdc++.h> using namespace std; const int _max = 10001; int c1[_max], c2[_max]; //c1存放前面项计

KMP入门 博客推荐+模板+入门习题

KMP入门 入门介绍 KMP入门博客推荐 next数组讲解 模板代码 //这个是对next进行的优化 void getnext() //做的第一步是获得next[]的值 { int i=0,k=-1; next[0]=-1; while(i<lenb) { if(k==-1 || str[i]==str[k]) { i++; k++; if(t[i]==t[k]) next[i]=next[k]; else next[i]=k; } else k=next[k]; } } //没有带优化的部分