蓝桥杯2017 包子凑数
小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有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 包子凑数相关推荐
- 蓝桥杯包子凑数java解析,蓝桥杯之包子凑数
标题:包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔就会 ...
- [蓝桥杯][2017年第八届真题]包子凑数(解题报告)
问题 1886: [蓝桥杯][2017年第八届真题]包子凑数 时间限制: 1Sec 内存限制: 128MB 提交: 406 解决: 118 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家 ...
- [蓝桥杯2017初赛]跳蚱蜢-map标记+bfs+环形数组
解题思路: 这题如果我们考虑蚱蜢跳,有很多蚱蜢,有很多情况,所以我们让空盘跳,这样就简化题目了,然后我们化圆为直,将题目的情况看成字符串012345678,最后要变成087654321,这样题目就变得 ...
- 蓝桥杯2017初赛:迷宫 (dfs搜索)
[蓝桥杯2017初赛]迷宫 Description X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立, ...
- 第八届蓝桥杯 2017年省赛真题(Java 大学C组)
蓝桥杯 2017年省赛真题 (Java 大学C组 ) 第一题:外星日历 第二题:兴趣小组 第三题:纸牌三角形 第四题:承压计算 第五题:杨辉三角 第六题:最大公共子串 第七题:Excel地址 第八题: ...
- 题目 1886: 蓝桥杯2017年第八届真题-包子凑数
时间限制: 1Sec 内存限制: 128MB 提交: 2378 解决: 789 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼 ...
- 蓝桥杯2017年第八届C/C++ B组省赛习题题解
目录 第一题:购物单(暴力计算) 第二题:等差素数数列(数学+暴力枚举) 第三题:承压计算(模拟) 第四题:方格分割(dfs) 第五题:取数位(模拟) 第六题:最大公共子串(dp) 第七题:日期问题( ...
- 渣科的第一次蓝桥杯2017
2017/4/7 出发的前一天, 大约下午1:30,开始整理东西,还是决定带上电脑,书包好重,原来买的三罐八宝粥我就不带了,最后选择了三条士力架,一条给亮,一条给舍友,一条给自己,带上衣服裤子,收拾完 ...
- 【解题报告+通法】_九宫幻方 蓝桥杯 2017年C组第八题(dfs解法)
题目描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. 三阶幻方又被 ...
最新文章
- 微博polg什么意思_贾磊:广东发微博给CBA造成了负面影响 方硕的意思可能没表达清楚...
- python学习--练习题1、2、3、4、5--
- 问题之传递参数名和接收参数名要一致。
- P2579,jzoj2288-[ZJOI2005]沼泽鳄鱼【矩阵乘法】
- 没有值的json字符串_Java中具有原始数据类型值的字符串连接
- mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践
- 分享一款自用网站导航分类目录程序源码
- boost::shared_ptr文档翻译
- 响应内容类型为CSV
- 为软件添加全网排行榜
- WordPress模板制作教程
- 不是技术牛人,如何拿到国内IT巨头的Offer
- 随便谈谈我的实习经历
- SpringBoot的序列化和反序列化
- 真神奇!敲击桌子就能操控iPad或iPhone
- python主机配置_python 之根据自己的需求配置hostname
- Java_Set接口
- python朴素贝叶斯对wine_基于朴素贝叶斯对Wine数据集分类
- class 和 def
- 首届 Rust China Hackathon 2022 线上活动正式启动 | 赛题征集+公司征集
热门文章
- 把AS代码链接到fla文件
- 一图掌握ISACA五大资格证书体系
- hdu 3265 Posters
- Android基础知识点学习总结
- 问题:未连接到互联网 代理服务器出现问题,或者地址有误。
- Mac 使用Charles后,退出Charles后,不能浏览网页,提示:未连接到互联网代理服务器出现问题,或者地址有误。
- Android-Application被回收引发空指针异常分析(消灭全局变量)
- JavaScript是解释型语言--V8、JIT
- CTF学习记录 i春秋 《从0到1:CTFer成长之路》文件上传
- 台式计算机硬盘英寸,2.5英寸的机械硬盘,能安装到台式机里面用么?