【蓝桥杯】43689.包子凑数

题目描述

  小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有 𝑁 种蒸笼,其中第 𝑖 种蒸笼恰好能放 𝐴𝑖 个包子。每种蒸笼都有非常多笼,可以认为是无限笼。
 每当有顾客想买 𝑋 个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有 𝑋 个包子。比如一共有 3 种蒸笼,分别能放 3、4 和 5 个包子。当顾客想买 11 个包子时,大叔就会选 2 笼 3 个的再加 1 笼 5 个的(也可能选出 1 笼 3 个的再加 2 笼 4 个的)。
  当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有 3 种蒸笼,分别能放 4、5 和 6 个包子。而顾客想买 7 个包子时,大叔就凑不出来了。
  小明想知道一共有多少种数目是包子大叔凑不出来的。

输入描述

第一行包含一个整数 𝑁 (1≤𝑁≤100)。
以下 N 行每行包含一个整数 𝐴𝑖 (1≤𝐴𝑖≤100)。

输出描述

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

输入输出样例

示例 1

输入
2
4
5

输出
6

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

示例 2

输入
2
4
6

输出
INF

样例说明
所有奇数都凑不出来,所以有无限多个

题目分析

  蓝桥杯官网上的讲解视频看得我头晕,还要这个定理,那个定理的,我们来尝试使用比较简单的方法来解决这个问题。

案例1:在案例1中 N = 2, 代表有两种笼子,A1 = 4,A2 = 5,问有多少个数是凑不出来的。
我们假设未知数为C,笼子的数量设为 X1 和 X2 ,那么就有等式 C = A1 × X1 + A2 × X2
其中 0 <= X1 < ∞ ,0 <= X2 < ∞ ,上面的那个等式不成立的次数,即为凑不出的个数。

观察一下当C 从 1 到 20 的情况,X1 和 X2 最小从0开始取值:

1 = 4 × ?+ 5 × ? 等式不成立;
2 = 4 × ?+ 5 × ? 等式不成立;
3 = 4 × ?+ 5 × ? 等式不成立;
4 = 4 × 1 + 5 × 0 等式成立;
5 = 4 × 0 + 5 × 1 等式成立;
6 = 4 × ?+ 5 × ? 等式不成立;
7 = 4 × ?+ 5 × ? 等式不成立;
8 = 4 × 2 + 5 × 0 等式成立;
9 = 4 × 1 + 5 × 1 等式成立;
10 = 4 × 0 + 5 × 2 等式成立;
11 = 4 × ? + 5 × ? 等式不成立;
12 = 4 × 3 + 5 × 0 等式成立;
13 = 4 × 2 + 5 × 1 等式成立;
14 = 4 × 1 + 5 × 2 等式成立;
15 = 4 × 0 + 5 × 3 等式成立;
16 = 4 × 4 + 5 × 0 等式成立;
17 = 4 × 3 + 5 × 1 等式成立;
18 = 4 × 2 + 5 × 2 等式成立;
19 = 4 × 1 + 5 × 3 等式成立;
20 = 4 × 5 + 5 × 0 等式成立;

案例2:在案例2中 N = 2, 代表有两种笼子,A1 = 4,A2 = 6,问有多少个数是凑不出来的。

1 = 4 × ?+ 6 × ? 等式不成立;
2 = 4 × ?+ 6 × ? 等式不成立;
3 = 4 × ?+ 6 × ? 等式不成立;
4 = 4 × 1 + 6 × 0 等式成立;
5 = 4 × ?+ 6 × ? 等式不成立;
6 = 4 × 0+ 6 × 1 等式成立;
7 = 4 × ?+ 6 × ? 等式不成立;
8 = 4 × 2 + 6 × 0 等式成立;
9 = 4 × ?+ 6 × ? 等式不成立;
10 = 4 × 1 + 6 × 1 等式成立;
11 = 4 × ? + 6 × ? 等式不成立;
12 = 4 × 3 + 6 × 0 等式成立;
13 = 4 × ?+ 6 × ? 等式不成立;
14 = 4 × 2+ 6 × 1 等式成立;
15 = 4 × ?+ 6 × ? 等式不成立;
16 = 4 × 4 + 6 × 0 等式成立;
17 = 4 × ?+ 6 × ? 等式不成立;

聪明的你应该看出一些规律了。
1, 如果A1 和 A2 … An 有最大公约数,且最大公约数不为1,则题目有无数解,记作INF。
比如案例2中,4和6有最大公约数2,则所有的奇数都无法组合出来;
2,如果A1 和 A2 … An 互质,就是说A1 和 A2 … An 的公约数为1,则题目有解。
3,当有解的情况下(即为A1 和 A2 互质), 可以通过动态规划的方法来求解。定义一个布尔数组 d p dp dp ,用于记录能否凑出对应数量的包子,初始状态下 d p [ 0 ] = t r u e dp[0] = true dp[0]=true,表示可以凑出 0 个包子。
然后遍历每一种蒸笼的容量 A i A~i~ A i ,对于大于等于 A i A~i~ A i  的每个数量 j j j , 若 d p [ j − a [ i ] ] dp[j - a[i]] dp[ja[i]] t r u e true true ,则 d p [ j ] = t r u e dp[j] = true dp[j]=true 。即意味着能通过个 j − A i j - A~i~ jA i  包子再加上一笼 A i A~i~ A i  的包子,可以凑出 j j j 个包子。
最后,统计数组 d p dp dp 中值为 f a l s e false false 的元素个数,该个数就是无法凑出的包子数量。

解题步骤

  1. 输入处理:读取输入的蒸笼种类数n和每种蒸笼的容量a[i]。
  2. 最大公约数计算:使用辗转相除法计算所有蒸笼容量的最大公约数gcd。如果gcd不为 1,输出INF并结束程序。
  3. 动态规划初始化:定义布尔数组dp并初始化为false,dp[0] = true。
  4. 动态规划更新:遍历每种蒸笼容量a[i],对j从a[i]到10000进行更新,若dp[j - a[i]]为true,则dp[j] =
    true。
  5. 结果统计:统计dp数组中值为false的个数并输出。

代码实现

def gcd(a, b):while b!= 0:a, b = b, a % breturn an = int(input())
a = [int(input()) for _ in range(n)]# 计算所有数的最大公约数
g = a[0]
for i in range(1, n):g = gcd(g, a[i])if g!= 1:print("INF")
else:dp = [False] * 10001dp[0] = Truefor i in a:for j in range(i, 10001):dp[j] = dp[j] or dp[j - i]print(sum([1 for i in range(10001) if not dp[i]]))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/68347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人机交互(包含推荐软件)

视觉交互、语音交互、笔式交互、触觉交互、虚拟环境交互。 主要的研究方面包括&#xff1a;人机交互界面表示模型与设计方法、可用性工程、可用性评估模型和方法、多模态智能交互技术、智能交互认知技术、语音识别交互、web界面交互设计、移动界面交互设计。 交互设计流程&am…

解锁未来情感科技:AI 机器人 Ropet 搭载的前沿智能黑科技

2025年的国际消费电子产品展览会&#xff08;CES&#xff09;上&#xff0c;一只可爱的“毛绒玩具”成了全场焦点。 当然&#xff0c;这并不是一个单纯的玩偶&#xff0c;而是和《超能陆战队》的大白一样温暖的陪伴机器人。 相信有很多人和小编一样&#xff0c;当年看完《超能…

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…

Flink(八):DataStream API (五) Join

1. Window Join Window join 作用在两个流中有相同 key 且处于相同窗口的元素上。这些窗口可以通过 window assigner 定义&#xff0c;并且两个流中的元素都会被用于计算窗口的结果。两个流中的元素在组合之后&#xff0c;会被传递给用户定义的 JoinFunction 或 FlatJoinFunct…

Flink CDC 在阿里云实时计算Flink版的云上实践

摘要&#xff1a;本文整理自阿里云高级开发工程师&#xff0c;Apache Flink Committer 阮航老师在 Flink Forward Asia 2024 生产实践&#xff08;三&#xff09;专场中的分享&#xff0c;主要分为以下四个方面&#xff1a; Flink CDC & 实时计算 Flink CDC YAML 核心功能…

如何使用wireshark 解密TLS-SSL报文

目录 前言 原理 操作 前言 现在网站都是https 或者 很多站点都支持 http2。这些站点为了保证数据的安全都通过TLS/SSL 加密过&#xff0c;用wireshark 并不能很好的去解析报文&#xff0c;我们就需要用wireshark去解密这些报文。我主要讲解下mac 在 chrome 怎么配置的&…

【大模型系列篇】数字人音唇同步模型——腾讯开源MuseTalk

之前有一期我们体验了阿里开源的半身数字人项目EchoMimicV2&#xff0c;感兴趣的小伙伴可跳转至《AI半身数字人开箱体验——开源项目EchoMimicV2》&#xff0c;今天带大家来体验腾讯开源的数字人音唇同步模型MuseTalk。 MuseTalk 是一个实时高品质音频驱动的唇形同步模型&#…

C++基础入门(二)

目录 前言 一、重载 1.函数重载 2.运算符重载 二、构造函数 1.什么是构造函数 2.带参数的构造函数 3.使用初始化列表 4.this关键字 5.new关键字 三、析构函数 1.什么是析构函数 四、静态成员变量 1.静态成员的定义 2.静态成员变量的作用 五、继承 1.继承基本概…

基础vue3前端登陆注册界面以及主页面设计

1.下载依赖 "element-plus/icons": "^0.0.11", "element-plus/icons-vue": "^2.3.1", "fortawesome/fontawesome-svg-core": "^6.7.2", "fortawesome/free-solid-svg-icons": "^6.7.2", &quo…

Mybatis-Plus:乐观锁与悲观锁

文章目录 一、场景二、乐观锁与悲观锁三、模拟修改冲突3.1 数据库中增加商品表3.2 添加数据3.3 添加实体3.4 添加mapper3.5 测试 四、乐观锁实现流程4.1 Mybatis-Plus实现乐观锁 一、场景 一件商品&#xff0c;成本价是80元&#xff0c;售价是100元。老板先是通知小李&#xf…

卷积神经网络——食物分类

整体框架&#xff1a; 导入库 导入了各种必需的Python库&#xff0c;用于数据处理、图像读取、模型构建和训练。 设置随机种子 seed_everything: 用于设置所有随机数生成器的种子&#xff0c;确保每次运行时的结果都是相同的。 图像预处理&#xff08;transform&#xff09; 对…

Jmeter配置服务代理器 Proxy(二)

1.创建脚本记录器 2.配置&#xff1a;Jmeter代理、端口、记录目标等 3.配置谷歌浏览器代理 浏览器配置代理的详细教程可参考&#xff1a;使用whistle代理-CSDN博客 4.启动Jmeter记录器 点击ok后弹出这个界面&#xff0c;生成了证书&#xff1a; 5.给浏览器安装Jmeter代理的证书…

灰色预测and BP神经网络 (详细上手使用)

灰色预测模型 基础知识&#xff1a; 白色系统&#xff1a;系统的信息是完全明确的。 灰色系统&#xff1a;系统的部分信息已知&#xff0c;部分信息未知。 黑色系统&#xff1a;系统的内部信息是未知的。 灰色预测是对既含有已知信息又含有不确定信息的系统进行预则&#xf…

mac 安装 node

brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…

【Unity】unity3D 调用LoadSceneAsync 场景切换后比较暗 部门材质丢失

解决方法&#xff1a;两个场景使用同样灯光 现象 直接进入第二个场景是可以正常显示 调用LoadSceneAsync来切换后&#xff0c;第二个场景出现比较暗的情况 解决方法&#xff1a;两个场景使用同样灯光&#xff0c;在loading 的场景中加入灯光。 Light—Directional Light 如果…

红日-VulnStack靶场一

http://vulnstack.qiyuanxuetang.net/vuln/ 一、环境部署 win7(被攻击机/关火墙) web服务器 1张外网网卡(桥接192.168.1.105)&#xff0c;一张内网网卡192.168.52.143/255.255.255.0/192.168.52.2 DNS 192.168.52.138 winser2008 域控服务器 1张…

实现linux硬盘smart检测

一、下载交叉编译libatasmart库 下载链接&#xff1a;https://www.linuxfromscratch.org/blfs/view/svn/general/libatasmart.html libatasmart库编译依赖libudev库&#xff0c;交叉编译器前先准备依赖的libudev: 设置libudev的环境变量&#xff0c;并通过configure编译文件生…

蓝桥杯算法|基础笔记(1)

**时间复杂度** 一、概念理解 时间复杂度是用来衡量算法运行时间随输入规模增长而增长的量级。它主要关注的是当输入规模趋向于无穷大时&#xff0c;算法执行基本操作的次数的增长趋势&#xff0c;而不是精确的运行时间。 二、分析代码中的基本操作 确定关键操作 在一段代码…

Uniapp判断设备是安卓还是 iOS,并调用不同的方法

在 UniApp 中&#xff0c;可以通过 uni.getSystemInfoSync() 方法来获取设备信息&#xff0c;然后根据系统类型判断当前设备是安卓还是 iOS&#xff0c;并调用不同的方法。 示例代码 export default {onLoad() {this.checkPlatform();},methods: {checkPlatform() {// 获取系…

K8S 节点选择器

今天我们来实验 pod 调度的 nodeName 与 nodeSelector。官网描述如下&#xff1a; 假设有如下三个节点的 K8S 集群&#xff1a; k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、镜像准备 1.1、镜像拉取 docker pull tomcat:8.5-jre8…