Holding Bin-Laden Captive:

题目链接:Holding Bin-Laden Captive!

“Given some Chinese Coins (硬币) (three kinds-- 1, 2, 5), and their number is num_1, num_2 and num_5 respectively, please output the minimum value that you cannot pay with given coins.”

Input

Input contains multiple test cases. Each test case contains 3 positive integers num_1, num_2 and num_5 (0<=num_i<=1000). A test case containing 0 0 0 terminates the input and this test case is not to be processed.

Output

Output the minimum positive value that one cannot pay with given coins, one line for one case.

题面大意:

题目真的又臭又长,没用的都删掉了。

有三种硬币,币值分别是1,2,5,现在给你三种硬币各自的数量,求最小的无法凑到的钱。

比如三种硬币各有1,1,3个,那么最小的无论如何也没法凑到的就是4元。

分析:

将这个问题转化为三个多项式相乘,不懂原理可以先看这篇文章:整数拆分问题(母函数)

而题目给的三个数num1,num2,num3限制的其实是三个多项式各自的项数:

三个多项式相乘会得到一个新的多项式,最小的无法凑到的钱也就是系数为0的最小的指数

以上面硬币的个数1,1,3为例,则多项式:

可以发现,,,……是不存在的(系数为0),那么这些钱都是无法凑到的,而其中最小的也就是我们要求的项,其指数就是答案——4。

那么这道题就转化为了三个多项式相乘

 代码:

 Poly和temp数组存放多项式,其下标i表示指数为i,存放的值为该项的系数

temp数组存放前两个多项式相乘的结果,Poly数组存放三个多项式相乘的结果,最后遍历Poly数组遇到的第一个值为0的元素,其指数就是答案。

多项式相乘的模拟可以自己在纸上模拟一遍应该就能看懂了,两层循环各自控制一个多项式的项,其相乘表现为指数的相加。

#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;int main()
{int  num[4];while(~scanf("%d %d %d",&num[1],&num[2],&num[3])){if(!num[1]&&!num[2]&&!num[3])break;int temp[10005];int Poly[10005];memset(Poly,0,sizeof(Poly));memset(temp,0,sizeof(temp));for(int i=0;i<=num[1];i++)for(int j=0;j<=2*num[2];j+=2)temp[i+j]+=1;;for(int i=0;i<=num[1]+2*num[2];i++){if(temp[i]>0){for(int j=0;j<=5*num[3];j+=5)Poly[i+j]+=temp[i];}}for(int i=1;i<=num[1]+2*num[2]+5*num[3]+1;i++){if(!Poly[i]){printf("%d\n",i);break;}}}return  0;
}

【组合数学】 Holding Bin-Laden Captive 详解相关推荐

  1. express中的bin/www文件详解

    2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env node 表明是node执行文件,在做repl工具时候的会用的 "#!"是标 ...

  2. oracle清除bin,Oracle recyclebin详解(闪回删除的表)

    在SOA应用数据库上运用DBMS_REDEFITION包进行在线非分区表转换分区表操作时,本想DROP掉建的临时表cube_scope_temp不小心后面忘记加"temp"直接执行 ...

  3. 【算法】组合数学——排列数生成算法详解(一)

    组合数学中的全排列深成算法历来是组合数学考试的重要考察点,因此在这里我简单的介绍一下6种全排列生成算法的详细过程,并借此比较它们之间的优劣之处. 不论是哪种全排列生成算法,都遵循着"原排列& ...

  4. Dockerfile 的详解

    我们可以把刚才的对容器的所有操作命令都记录到一个文件里,就像写更脚本程序. 之后用 docker build 命令以此文件为基础制作一个镜像,并会自动提交到本地仓库. 这样的话镜像的构建会变的透明化, ...

  5. ARM(IMX6U)裸机之I.MX6ULL启动头文件详解(内部BOOT ROM、IVT + Boot data + DCD + led.bin)

    参考:Linux之ARM(IMX6U)裸机之I.MX6ULL镜像烧写以及启动头文件的详解 作者:一只青木呀 发布时间: 2020-08-09 17:10:00 网址:https://blog.csdn ...

  6. BIN,S19,M0T,SREC,HEX文件解析;FileParse(一)之文件详解

    简介 一.摘要 1.描述 2.关键字 二.为什么要文件解析 三.BIN文件格式 四.S19,M0T,SREC文件格式 五.HEX文件格式 六.源码下载 七.其他 八.参考 一.摘要 1.描述 本文主要 ...

  7. mysql relay bin 主库_MySQL主库binlog(master-log)与从库relay-log关系代码详解

    主库binlog: # at 2420 #170809 17:16:20 server id 1882073306 end_log_pos 2451 CRC32 0x58f2db87 Xid = 32 ...

  8. 详解鸽巢原理【组合数学】

    鸽巢原理的简单形式: 如果要把n+1个物体,放进n个盒子,那么至少有一个盒子包含两个或更多的物体. 证明:用反证法.如果这n个盒子中的每一个都至多含有一个物体,那么物体的最多数量是n.这与我们有n+1 ...

  9. linux bin fuser,Linux中fuser命令用法详解

    描述: fuser可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息. fuser显示使用指定文件或者文件系统的进程ID. 默认情况下每个文件名后面跟一个字母 ...

最新文章

  1. 刘光毅:频谱统一推进5G尽早商用 4G网络向5G平滑演进
  2. MVC把随机产生的字符串转换为图片
  3. 输入框限定保留三位小数点
  4. uniapp封装网络请求_八张图带你走进“通过一个完美请求封装一个网络模块”
  5. div+css 单行或者多行超出文本,数字,字母长度自动省略
  6. python实例之 67,68
  7. 好婚姻必定是灵魂佳偶
  8. 历经十年,Windows 7 生命周期将结束,微软:快换 Windows 10
  9. Java 内存模型(Java Memory Model,JMM)
  10. 【转】Maven 手动添加 JAR 包到本地仓库
  11. 设计模式之——策略(Strategy)模式
  12. mysql必要的监控项目--转自土豆大神的博客
  13. lwj_C#_work 字符串、类的使用和数学运算
  14. 针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言466-476条如下:
  15. DRM破解再升级 支持新版WM11
  16. win10默认头像路径
  17. 【释义详解】Software License (软件许可证)是什么?
  18. linux文件操作管理,linux 文件管理操作入门
  19. 转载:详解5个被误解的CPU/GPU概念
  20. Download模块 (十三)

热门文章

  1. IOS 界面设计基本知识(HIG)
  2. 自掘坟墓--上网助手路在何方
  3. wp+login.php默认密码,更改wordpress的默认登录页面名称wp-login
  4. 淘宝卖家承担运费怎么承担?什么情况卖家承担?
  5. rem布局封装及使用
  6. 【Android】Kotlin学习(一)
  7. 说说最小均方误差(MMSE)
  8. 这次建博会,我们读到了凯迪仕的哪些信息?
  9. Win10微软商店怎么改中文?
  10. 常用汉字的UTF-8编码及编码范围