小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有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

思路:

数学问题,是属于求解A1x1+A2X2+…+AiXi=C不定方程的类型,有数学家已经证明了Ax+By=C,在A,B不互质时有无限个使方程无解的C,在A,B互质时使方程无解的C有限,且使方程无解的C的最大值小于A*B-A-B。通过上述结论,可以得出:

*1.只要A1…Ai中存在两个下标为x,y的数互质,则使得方程无解的C有限,且C<=A[x]A[y]-A[x]-A[y]。

2.如果A1…Ai中没有两个数互质,则方程有无限多个是方程无解的C。

根据上述结论就可以得到无限多个C的条件,现在考虑C有限情况下的个数。
现在就把问题转换为了背包问题,i个不同重量大小的物品刚好装满背包。
根据dp的性质,最后下面一行数组就可以得到满足条件的背包容量有哪些。
大概就是这么一个填充思路,行代表背包容量,列代表物体重量。
但是这题还有另一个思路,反正都是继承自上一行,而且需要得到的是不能被完全装满的背包容量,而不是最多的物品重量,那干脆只开一行数组,然后每次遇到可以被表示的数,数再加上物品i的重量必然也可以被表示。

最后统计数组中0的个数就是我们要的解。
代码如下:

#include<iostream>
#include<algorithm>
#include<vector>using namespace std;vector<int> Ai;
int f[10000];int gcd(int x, int y) {if (y == 0)return x;return gcd(y, x % y);
}int main() {int n;cin >> n;for (int i = 0; i < n; i++){int data;cin >> data;Ai.push_back(data);}int max;bool flag=false;for (int i = 0; i < Ai.size()&&!flag; i++){//判断解是否有限for (int j = i+1; j < Ai.size(); j++){if (gcd(Ai[i], Ai[j]) == 1) {max = Ai[i] * Ai[j] - Ai[i] - Ai[j];flag = true;break;}}}if (!flag) {cout << "INF\n";return 0;}f[0] = true;for (int i = 0; i <= max; i++) {//处理背包问题for (int j = 0; j < Ai.size()&&f[i]; j++) {if(i + Ai[j]<=max)f[i + Ai[j]] = true;}}int num = 0;for (int i = 0; i <= max; i++){//统计解的个数if (!f[i])num++;}cout << num;return 0;
}

蓝桥杯2017 包子凑数相关推荐

  1. 蓝桥杯包子凑数java解析,蓝桥杯之包子凑数

    标题:包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔就会 ...

  2. [蓝桥杯][2017年第八届真题]包子凑数(解题报告)

    问题 1886: [蓝桥杯][2017年第八届真题]包子凑数 时间限制: 1Sec 内存限制: 128MB 提交: 406 解决: 118 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家 ...

  3. [蓝桥杯2017初赛]跳蚱蜢-map标记+bfs+环形数组

    解题思路: 这题如果我们考虑蚱蜢跳,有很多蚱蜢,有很多情况,所以我们让空盘跳,这样就简化题目了,然后我们化圆为直,将题目的情况看成字符串012345678,最后要变成087654321,这样题目就变得 ...

  4. 蓝桥杯2017初赛:迷宫 (dfs搜索)

    [蓝桥杯2017初赛]迷宫 Description X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立, ...

  5. 第八届蓝桥杯 2017年省赛真题(Java 大学C组)

    蓝桥杯 2017年省赛真题 (Java 大学C组 ) 第一题:外星日历 第二题:兴趣小组 第三题:纸牌三角形 第四题:承压计算 第五题:杨辉三角 第六题:最大公共子串 第七题:Excel地址 第八题: ...

  6. 题目 1886: 蓝桥杯2017年第八届真题-包子凑数

    时间限制: 1Sec 内存限制: 128MB 提交: 2378 解决: 789 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼 ...

  7. 蓝桥杯2017年第八届C/C++ B组省赛习题题解

    目录 第一题:购物单(暴力计算) 第二题:等差素数数列(数学+暴力枚举) 第三题:承压计算(模拟) 第四题:方格分割(dfs) 第五题:取数位(模拟) 第六题:最大公共子串(dp) 第七题:日期问题( ...

  8. 渣科的第一次蓝桥杯2017

    2017/4/7 出发的前一天, 大约下午1:30,开始整理东西,还是决定带上电脑,书包好重,原来买的三罐八宝粥我就不带了,最后选择了三条士力架,一条给亮,一条给舍友,一条给自己,带上衣服裤子,收拾完 ...

  9. 【解题报告+通法】_九宫幻方 蓝桥杯 2017年C组第八题(dfs解法)

    题目描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. 三阶幻方又被 ...

最新文章

  1. 微博polg什么意思_贾磊:广东发微博给CBA造成了负面影响 方硕的意思可能没表达清楚...
  2. python学习--练习题1、2、3、4、5--
  3. 问题之传递参数名和接收参数名要一致。
  4. P2579,jzoj2288-[ZJOI2005]沼泽鳄鱼【矩阵乘法】
  5. 没有值的json字符串_Java中具有原始数据类型值的字符串连接
  6. mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践
  7. 分享一款自用网站导航分类目录程序源码
  8. boost::shared_ptr文档翻译
  9. 响应内容类型为CSV
  10. 为软件添加全网排行榜
  11. WordPress模板制作教程
  12. 不是技术牛人,如何拿到国内IT巨头的Offer
  13. 随便谈谈我的实习经历
  14. SpringBoot的序列化和反序列化
  15. 真神奇!敲击桌子就能操控iPad或iPhone
  16. python主机配置_python 之根据自己的需求配置hostname
  17. Java_Set接口
  18. python朴素贝叶斯对wine_基于朴素贝叶斯对Wine数据集分类
  19. class 和 def
  20. 首届 Rust China Hackathon 2022 线上活动正式启动 | 赛题征集+公司征集

热门文章

  1. 把AS代码链接到fla文件
  2. 一图掌握ISACA五大资格证书体系
  3. hdu 3265 Posters
  4. Android基础知识点学习总结
  5. 问题:未连接到互联网 代理服务器出现问题,或者地址有误。
  6. Mac 使用Charles后,退出Charles后,不能浏览网页,提示:未连接到互联网代理服务器出现问题,或者地址有误。
  7. Android-Application被回收引发空指针异常分析(消灭全局变量)
  8. JavaScript是解释型语言--V8、JIT
  9. CTF学习记录 i春秋 《从0到1:CTFer成长之路》文件上传
  10. 台式计算机硬盘英寸,2.5英寸的机械硬盘,能安装到台式机里面用么?