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

原创 2018年04月17日 19:54:36

HDU 1085

学习母函数的时候看到这个题最水,就从他下手了,英语课看百度百科关于母函数的讲解,看的有点懵

母函数分两种:普通型生成函数,指数型生成函数,先从普通型生成函数开始

其实没有想象的那么复杂,之所以构建母函数,并且用多项式相乘的方式进行计算,推测大概就是因为指数进行运算时指数相加,指数模拟的是数的加法,而乘法有利于数的遍历,其中每个数的系数表示生成该指数的方式数,所以在我看来普通型生成函数就是一个简单的模拟过程,继续刷一刷题

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
using namespace std;
#define maxn 8 * 1000 + 5
int n1[maxn], n2[maxn];
int main()
{
    int val[3] = {1, 2, 5};
    int n[3];
    while(scanf("%d%d%d",&n[0],&n[1],&n[2]) != EOF)
    {
        if(n[0] == 0 && n[1] ==  0 && n[2] == 0) break;
        memset(n1, 0, sizeof(n1));//存放每一项前的系数,例如n1[5] = 2就代表x^5系数为2
        memset(n2, 0, sizeof(n2));//存放中间值
        int maxy = 0;
        for(int i = 0; i < 3; i ++)//计算理论最大数值
            maxy += n[i] * val[i];
        for(int i = 0; i <= n[0]; i ++)//预处理第一个多项式
            n1[i] = 1;
        for(int i = 1; i < 3; i ++)//遍历除第一个多项式外的所有多项式
        {
            for(int j = 0; j <= maxy; j ++)
            {
                if(n1[j])//如果存在该项
                {
                    for(int k = 0; k <= val[i] * n[i]; k += val[i])//模拟多项式相乘
                        if(j + k <= maxy)
                            n2[j + k] += n1[j];
                }
            }
            memcpy(n1, n2, sizeof(n1));//将结果存在n1中
            memset(n2, 0, sizeof(n2));//清空n2
        }
        int i;
        for(i = 0; i <= maxy; i ++)
        {
            if(!n1[i])
            {
                //flag = i;
                break;
            }
        }
        printf("%d\n",i);
    }
    return 0;
}

版权声明:弱鸡弱鸡弱的一匹 https://blog.csdn.net/qq_41444888/article/details/79979706

杭电ACM hdu 1085 Holding Bin-Laden Captive! 解题报告(母函数)

出处:http://acm.hdu.edu.cn/showproblem.php?pid=1085 Problem Description We all know that Bin-Laden is...
  • u012077163
  • u012077163
  • 2013-11-30 16:27:03
  • 2471

Holding Bin-Laden Captive!(母函数)

Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J...
  • ZSGG_ACM
  • ZSGG_ACM
  • 2014-08-31 22:55:05
  • 860

hdu 1085 Holding Bin-Laden Captive!(Java)

hdu 1085 Holding Bin-Laden Captive!(Java)
  • jwzdw123
  • jwzdw123
  • 2015-09-09 21:52:04
  • 222

杭电OJ——1085 Holding Bin-Laden Captive!(母函数解答!)

Holding Bin-Laden Captive! Problem Description We all know that Bin-Laden is a notorious t...
  • lishuhuakai
  • lishuhuakai
  • 2012-12-07 08:26:21
  • 2850

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

Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja...
  • yanghui07216
  • yanghui07216
  • 2015-09-08 21:14:23
  • 175

hdu 1085 Holding Bin-Laden Captive!(母函数/背包)

Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J...
  • acm_cxq
  • acm_cxq
  • 2016-10-15 21:56:06
  • 260

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

题目大意:有三种硬币,1分,2分,5分,分别给出三种硬币的个数,问由这些硬币不能构成的最小值是多少。 代码实现: #include #include const int maxn=8050; int ...
  • u011346442
  • u011346442
  • 2015-02-08 22:18:28
  • 227

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

We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But rec...
  • kele52he
  • kele52he
  • 2017-09-04 15:35:06
  • 95

HDU 1085 Holding Bin-Laden Captive! 母函数

点击打开链接 Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/...
  • Dinivity123
  • Dinivity123
  • 2014-02-08 09:25:12
  • 652

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

HDU 1085 Holding Bin-Laden Captive!(母函数) 题目地址 题意:  给你cnt1个一元硬币,cnt2个两元硬币,cnt3个五元硬币,问不能凑出来的第一个面额是多少...
  • hcbbt
  • hcbbt
  • 2014-05-25 22:50:45
  • 2203
收藏助手
不良信息举报
您举报文章:HDU 1085 Holding Bin-Laden Captive! (母函数)
举报原因:
原因补充:

(最多只允许输入30个字)