2017蓝桥杯 包子凑数(递推,数学思想)_凑数问题的数学思想-CSDN博客

adminadmin 2024-04-18 56 阅读 0 评论
2017蓝桥杯 包子凑数(递推,数学思想)_凑数问题的数学思想-CSDN博客

  包子凑数

  小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。

  每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。

  当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有3种蒸笼,分别能放4、5和6个包子。而顾客想买7个包子时,大叔就凑不出来了。

  小明想知道一共有多少种数目是包子大叔凑不出来的。

  输入

  ----

  第一行包含一个整数N。(1 <= N <= 100)

  以下N行每行包含一个整数Ai。(1 <= Ai <= 100)

  输出

  ----

  一个整数代表答案。如果凑不出的数目有无限多个,输出INF。

  例如,

  输入:

  2

  4

  5

  程序应该输出:

  6

  再例如,

  输入:

  2

  4

  6

  程序应该输出:

  INF

  样例解释:

  对于样例1,凑不出的数目包括:1, 2, 3, 6, 7, 11。

  对于样例2,所有奇数都凑不出来,所以有无限多个。

  资源约定:

  峰值内存消耗(含虚拟机) < 256M

  CPU消耗  < 1000ms

  请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

  注意:

  main函数需要返回0;

  只使用ANSI C/ANSI C++ 标准;

  不要调用依赖于编译环境或操作系统的特殊函数。

  所有依赖的函数必须明确地在源文件中 #include

  不能通过工程设置而省略常用头文件。

  提交程序时,注意选择所期望的语言类型和编译器类型。

  鉴于很多人难于理解难点2,这里就简单证明一下:

  假设a1...an是升序排列,下面只拿a1,a2,a3去证明

  题解:

  这一题有两个难点:

  1为能否算出所有的能凑成的数(以10000为最大界限,因为Ai最大为100,N也才为100,10000足够代表所有的数了),

  2为如何判断凑出来的数是否为无限个。

  第一个难点:先找到s,接下来的问题就变成了:用a1...an,在1-s-1之间能凑成多少个数,用递归就能解决。(至于为什么s一定能在10000之内找到,看评论。)

  第二个难点在于思想,比如有三个数,2,6,9,如果能找到连续的两个数能用着三个数组成,那么这两个数后面的数都能被组成,只要不断在那两个数上加2就行。(不明白的看上面的证明) 具体代码如下:

The End 微信扫一扫

文章声明:以上内容(如有图片或视频在内)除非注明,否则均为雨燕体育直播_雨燕无插件体育直播_雨燕直播体育_雨燕体育直播nba原创文章,转载或复制请以超链接形式并注明出处。

本文作者:admin本文链接:https://revequebec.com/post/4572.html

上一篇 下一篇

相关阅读

发表评论

访客 访客
快捷回复: 表情:
评论列表 (暂无评论,56人围观)

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码