题目连接

题目意思:有单位价值为1 2 5的三种硬币,分别给出他们的数量,求用这些硬币不能组成的最小的价值

解题思路:普通的母函数

普通的母函数:

 利用母函数的思想可以解决很多组合问题,下面举例说明:

 1.口袋中有白球2个,红球3个,黄球1个,从袋中摸出3个球有几种取法?

    和上面描述的例子类似,我们可以用次数代表球的个数,多项式的每一项前面的系数代表取法的种树。

  可以很容易地写出下面这个式子:

  (1+x+x2)(1+x+x2+x3)(1+x)

  (1+x+x2)表示有白球2个,1(1可以看做是x的0次方)表示白球不取,x代表取1个白球,x2代表取2个白球,即用x的次数表示取球的个数,后面的也是类似。那么这个多项式的乘积就把所有的情况都表示出来了,对于最终乘积的每一项anxn,表示取n个球有an种取法。

2.有若干个1克,2克,5克的砝码,要称出20克的重量,有多少种称法?

  这里不限制砝码的个数,无所谓,照样写出母函数:

  (1+x+x2+x3+......xk+....)(1+x2+x4+x6......+x2n+......)(1+x5+x10+......x5m+......)

  因为要称出20克,所以只需要找找到结果中次数为20 的那一项就可以得到结果。

3.同样对于正数划分也可以解决,比如有整数20,划分成1,2,5,有多少种划分方法?

  解法和2的类似。

还有一类题目和这类似,有n个球放到m个盒子中,有多少种不同的放法?

(1+x+x2+x3+...xk+...)(1+x+x2+x3+...xk+...)(1+x+x2+x3+...xk+...)总共有m项,然后找出乘积中次数为n的那一项系数。

代码实现:

模拟多项式的乘积过程,c[i]表示次数为i的系数,成tempc[]数组是一个暂存数组

该题的母函数不难得出是(1+x+x2+x3+......xk+....)(1+x2+x4+x6......+x2n+......)(1+x5+x10+......x5m+......)

对于单位价值为1的硬币,不去次数为0,取一个次数为1,取两个次数为2.。。。。。

对于单位价值为2的硬币,不去次数为0,取一个次数为2,取两个次数为4.。。。。。

对于单位价值为5的硬币,不去次数为0,取一个次数为5,取两个次数为10.。。。。。

普通母函数的精髓就是将组合问题通过次数及系数来表示在某次组合中的选择是怎样的,如分别选择多少个什么种类的东西

c[]数组初始化为第一个多项式乘积因子(1+x+x2+x3+......xk+....)的相应次数的系数

tempc[]数组暂存多项式乘积因子(1+x+x2+x3+......xk+....)与多项式乘积因子(1+x2+x4+x6......+x2n+......)相乘后相应的次数的系数,并赋给c[]数组。

注意:此时c[]数组存储的是多项式乘积因子(1+x+x2+x3+......xk+....)与多项式乘积因子(1+x2+x4+x6......+x2n+......)相乘后相应的次数的系数。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int cent[]={,,};
int i,j,k,num[],c[],tempc[];
while(~scanf("%d%d%d",&num[],&num[],&num[]))
{
if(num[]==&&num[]==&&num[]==)break;
int max=num[]+num[]*+num[]*;
memset(c,,sizeof(c));
memset(tempc,,sizeof(tempc));
for(i=;i<=num[]*cent[];i+=cent[])
c[i]=;
for(i=;i<;i++)
{
for(j=;j<=max;j++)
for(k=;k+j<=max&&k<=cent[i]*num[i];k+=cent[i])
tempc[k+j]+=c[j];
for(j=;j<=max;j++)
{
c[j]=tempc[j];
tempc[j]=;
}
}
for(i=;i<=max;i++)
{
if(c[i]==)break;
}
printf("%d\n",i);
}
return ;
}

hdu1085Holding Bin-Laden Captive!组合问题的更多相关文章

  1. 用主题模型可视化分析911新闻(Python版)

    本文由 伯乐在线 - 东狗 翻译,toolate 校稿.未经许可,禁止转载!英文出处:blog.dominodatalab.com.欢迎加入翻译小组. 本文介绍一个将911袭击及后续影响相关新闻文章的 ...

  2. java源代码分析----jvm.dll装载过程

    简述众所周知java.exe是java class文件的执行程序,但实际上java.exe程序只是一个执行的外壳,它会装载jvm.dll(windows下,以下皆以windows平台为例,linux下 ...

  3. How do I learn mathematics for machine learning?

    https://www.quora.com/How-do-I-learn-mathematics-for-machine-learning   How do I learn mathematics f ...

  4. Labeled Faces in the Wild 人脸识别数据集 部分测试数据

    development test set Note: images displayed are original (non-aligned/funneled) images. match pairs ...

  5. Linux从入门到放弃

    Ch.0 几点Linux常识 Linux严格区分大小写,不像windows中命令是不区分大小写的 Linux中所有内容以文件形式保存,包括硬件 Linux不靠扩展名区分文件类型,所有扩展名只是为了方便 ...

  6. centos7-centos6常用配置对比

    设置(CentOS 6 vs CentOS 7)系统常用配置 ysvinit vs Upstart vs Systemd) 常见设置: 字符集CentOS 6方法:/etc/sysconfig/i1 ...

  7. docker容器的学习笔记

    目录 Docker入门学习笔记(一) 1. 什么是Docker? 2. Docke的目标 3. Docker通常应用场景 4. Docker的基本组成 补:Docker容器相关技术简介 安装Docke ...

  8. EAC3 mantissa quantization(VQ & GAQ)

    EAC3基于hebap来决定mantissa的quantizer. hebap如下: mantissa 使用VQ(vector quantization) 和GAQ(gain adaptive qua ...

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

    Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

随机推荐

  1. 详细解析用Squid实现反向代理的方法

    代理服务器是使 用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受 外部网主机的攻击.但是,如果想让互联网 ...

  2. Android Handler 异步消息处理机制的妙用 创建强大的图片载入类

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 近期创建了一个群.方便大家交流,群号: ...

  3. Django--网页管理实例解析

    此篇为代码流程的注释以及自己写的小项目的思路: 首先是项目的路由配置: urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^yemia ...

  4. Ubuntu下安装Oracle JRE运行环境

    安装Oracle JDK -linux-i586.tar.gz安装参见在Ubuntu下利用Eclipse调试FFmpeg Linux x64:链接:http://pan.baidu.com/s/1gd ...

  5. arcgis10.0 切片并发布服务及验证

    1.切片参考网址:https://jingyan.baidu.com/article/fa4125accc6bef28ac7092d7.html 2.通过下面代码验证  参考网址https://www ...

  6. 有状态的EJB对象和无状态的EJB对象

    一,定义有状态Bean和无状态Bean 有状态Bean: @Stateful @Remote public class StatefulEjbBean implements StatefulEjb{ ...

  7. EasyNVR H5流媒体服务器方案架构设计之视频能力平台

    历经过程 阶段一:经历过传统安防开发过程的开发者都有一种感觉,就是各种业务交织,各个模块的开发扯皮,各种数据库连接冲突,这很让开发工作效率很低,而且会给整体的开发带来负面影响,更重要的是,耦合度太高, ...

  8. SQL中的四种连接方式

    转自:http://www.cnblogs.com/afirefly/archive/2010/10/08/1845906.html 联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指 ...

  9. php异步任务处理: gearman

    Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡 准备软件包 gearmand-1.1.12.tar.gz gearman-1. ...

  10. android 服务与多线程

    android服务是执行在UI主线程的.一下是代码demo: package com.example.testservice; import android.os.Bundle; import and ...