当前位置: 首页 > article >正文

【蓝桥杯】包子凑数

包子凑数

题目描述

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

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

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

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

输入描述

第一行包含一个整数 NN (1≤N≤1001≤N≤100)。

以下 N 行每行包含一个整数 AiAi​ (1≤Ai≤1001≤Ai​≤100)。

输出描述

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

输入输出样例

示例 1

输入

2
4
5

输出

6

样例说明

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

示例 2

输入

2
4
6

输出

INF

样例说明

所有奇数都凑不出来,所以有无限多个

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 8165  |  总提交次数: 9840  |  通过率: 83%

难度: 困难   标签: 2017, 裴蜀定理, 省赛, 动态规划

问题分析:包子凑数(裴蜀定理 + 动态规划)

核心算法思路
  1. ​裴蜀定理应用​​:

    • 若所有蒸笼容量 Ai​ 的最大公约数 g=1,则存在无限多个无法凑出的数(输出 INF
    • 若 g=1,则无法凑出的数是有限的(需动态规划统计)。
  2. ​动态规划(完全背包)​​:

    • ​状态定义​​:dp[j] = true 表示能凑出 j 个包子。
    • ​初始化​​:dp[0] = true(0 个包子不需要任何蒸笼)
    • ​状态转移​​:

      for (每种蒸笼容量 a[i]) for (j = a[i]; j <= MAX; j++) dp[j] = dp[j] || dp[j - a[i]];

    • ​统计结果​​:遍历 dp[1..MAX],计数 dp[j] = false 的数量
算法步骤
  1. ​计算最大公约数​​:

    • 初始化 g=A0​,遍历 g=gcd(g,Ai​)。
    • 若 g=1,输出 INF 并结束。
  2. ​动态规划求解​​:

    • 设背包容量 MAX = 10000(因 Ai​≤100,最大不可凑数 <1002)
    • 对每种蒸笼容量更新 dp 数组。
  3. ​统计无法凑出的数量​​:

    • 遍历 dp[1..MAX],统计 false 的个数。

C++ 代码实现

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;// 计算最大公约数
int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);
}int main() {const int MAX = 10000;  // 背包最大容量int n;cin >> n;vector<int> a(n);vector<bool> dp(MAX + 1, false);  // dp数组初始化// 输入并计算最大公约数int g = 0;for (int i = 0; i < n; i++) {cin >> a[i];g = (i == 0) ? a[i] : gcd(g, a[i]);}// 检查最大公约数if (g != 1) {cout << "INF" << endl;return 0;}// 动态规划(完全背包)dp[0] = true;  // 初始化:0个包子可凑出for (int i = 0; i < n; i++) {for (int j = a[i]; j <= MAX; j++) {if (dp[j - a[i]]) dp[j] = true;  // 状态转移}}// 统计无法凑出的数量int count = 0;for (int i = 1; i <= MAX; i++) {if (!dp[i]) count++;}cout << count << endl;return 0;
}

代码解析

  1. ​最大公约数计算​​:

    • 使用递归实现辗转相除法,时间复杂度 O(log(min(Ai​)))
  2. ​动态规划核心​​:

    • ​空间优化​​:使用一维 dp 数组,避免二维空间开销
    • ​完全背包逻辑​​:每种蒸笼无限使用,内层循环正序更新(区别于01背包的逆序)
  3. ​边界与效率​​:

    • ​背包容量​​:MAX=10000 的设定基于裴蜀定理(Ai​≤100 时最大不可凑数 <1002)
    • ​时间复杂度​​:O(N×MAX),满足 N≤100、MAX=104,1秒内可完成

示例验证

  • ​输入 [4, 5]​:
    • g=gcd(4,5)=1,动态规划后统计得无法凑出 {1,2,3,6,7,11},输出 6
  • ​输入 [4, 6]​:
    • g=gcd(4,6)=2=1,直接输出 INF

相关文章:

【蓝桥杯】包子凑数

包子凑数 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有 NN 种蒸笼&#xff0c;其中第 ii 种蒸笼恰好能放 AiAi​ 个包子。每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。 每当有顾客想买 XX 个包子&#xff0c;卖包子的大叔就会迅速选出若干…...

ck-editor5的研究 (2):对 CKEditor5 进行设计,并封装成一个可用的 vue 组件

前言 在上一篇文章中—— ck-editor5的研究&#xff08;1&#xff09;&#xff1a;快速把 CKEditor5 集成到 nuxt 中 &#xff0c;我仅仅是把 ckeditor5 引入到了 nuxt 中&#xff0c;功能还不算通用。 这一篇内容将会对其进行设计&#xff0c;并封装成可复用的 vue 组件&…...

Java-redis实现限时在线秒杀功能

1.使用redisson pom文件添加redisson <!--redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.4</version></dependency> 2.mysql数据库表设…...

simulink mask、sfunction和tlc的联动、接口

这里全部是讲的level2 sfunction&#xff08;用m语言编写&#xff09;&#xff0c;基于matlab 2020a。 1.mask的参数操作 1&#xff09;mask通过set_param和get_param这2个函数接口对mask里面定义的Parameters&Dialog的参数的大部分属性进行读写&#xff0c;一般是Value值…...

VMWare安装常见问题

如果之前安装过VMWare软件&#xff0c;只要是 15/16 版本的&#xff0c;可以正常使用的&#xff0c;不用卸载&#xff01;&#xff01;&#xff01; 如果之前安装过&#xff0c;卸载了&#xff0c;一定要保证通过正常的渠道去卸载&#xff08;通过控制面板卸载软件&#xff09…...

set_property LOC约束

##下列指令是用于清除自带GT CELL相关的LOC约束&#xff0c;或者覆盖 ##你需要把IP中自带的GT cell相关的LOC约束清除掉&#xff0c;或者覆盖掉 ##以下命令可以用来覆盖GT_CHANNEL的LOC约束, 在这条命令之后执行你自己的physical constraint: ##GT的channel的相关管脚有两种设计…...

【北邮 操作系统】第十二章 文件系统实现

一、文件的物理结构 1.1 文件块、磁盘块 类似于内存分页&#xff0c;磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中&#xff0c;磁盘块的大小与内存块、页面的大小相同 内存与磁盘之间的数据交换(即读/写操作、磁盘I/0)都是以“块”为单位进行的。即…...

Docker 插件生态:从网络插件到存储插件的扩展能力解析

Docker 容器技术以其轻量、快速、可移植的特性,迅速成为构建和部署现代应用的核心工具。然而,尽管 Docker Engine 自身功能强大,但在面对多样化的生产环境和复杂业务需求时,仅靠核心功能往往无法满足所有场景。 例如,跨主机的容器网络通信、异构存储系统的持久化数据管理…...

WordPress搜索引擎优化的最佳重定向插件:进阶指南

在管理网站时&#xff0c;我们经常需要调整网页地址或修复错误链接。这时&#xff0c;通过重定向不仅能有效解决这些问题&#xff0c;还能显著提升网站在搜索引擎中的排名。对于熟悉基础重定向插件的用户来说&#xff0c;一些功能更强大的工具可以帮助你更全面地管理网站&#…...

org.junit.runners.model.InvalidTestClassError:此类问题的解决

不知道大家是否遇见过以上这种情况&#xff0c;我也是今天被这个错误搞得很烦&#xff0c;后来通过网上查找资料终于找到了问题所在————就是简单的Test注解的错误使用 Test注解的注意情况 &#xff1a;1 权限必须是public 2 不能有参数 3 返回值类型是void 4 本类的其他的…...

用户管理页面(解决toggleRowSelection在dialog用不了的隐患,包含el-table的plus版本的组件)

新增/编辑/删除/分配角色&#xff0c;图片上传在此文章分类下另一个文章 1.重点分配角色&#xff1a; <template><!-- 客户资料 --><div class"pageBox"><elPlusTable :tableData"tableData" :tablePage"tablePage" onSi…...

打卡第35天:GPU训练以及类的Call方法

知识点回归&#xff1a; 1.CPU性能的查看&#xff1a;看架构代际、核心数、线程数 2.GPU性能的查看&#xff1a;看显存、看级别、看架构代际 3.GPU训练的方法&#xff1a;数据和模型移动到GPU device上 4.类的call方法&#xff1a;为什么定义前向传播时可以直接写作self.fc1(x)…...

Linux-GCC、makefile、GDB

GCC gcc -E test.c -o test.i预处理(-o指定文件名) gcc -S test.i -o test.s编译gcc -c test.s -o test.o汇编gcc test.o -o test链接(生成一个可执行程序的软连接) gcc test.c -o test一条指令可以完成以上所有内容 gcc *.c -I(大写的i) include由于在main.c中找不到当前文件…...

[MySQL初阶]MySQL(7) 表的内外连接

标题&#xff1a;[MySQL初阶]MySQL(7)表的内外连接 水墨不写bug 文章目录 一. 内连接 (INNER JOIN)二. 外连接 (OUTER JOIN)关键区别总结 三、 如何选择 在 MySQL 中&#xff0c;连接&#xff08;JOIN&#xff09;用于根据两个或多个表之间的相关列组合行。内连接&#xff08;I…...

Spring Boot中Excel处理完全指南:从基础到高级实践

Excel处理基础知识 1.1 为什么需要在应用中处理Excel文件&#xff1f; 在企业应用开发中&#xff0c;Excel文件处理是一个非常常见的需求&#xff0c;主要用于以下场景&#xff1a; 数据导入&#xff1a;允许用户通过Excel上传批量数据到系统 数据导出&#xff1a;将系统数据…...

Windows下NVM的安装与使用

本文将介绍windows下nvm相关知识。 在不同的项目中可能会使用不同版本的Node.js&#xff0c;例如A项目中需要node>18&#xff1b;B项目中需要node>20。这时候就需要使用NVM切换不同的node版本。进而可以在同一台设备上使用多个node版本。 一、NVM是什么&#xff1f; n…...

Ubuntu挂起和休眠

Ubuntu挂起和休眠 1. 挂起&#xff08;Suspend&#xff09;2. 休眠&#xff08;Hibernate&#xff09;3. 混合挂起&#xff08;Hybrid-Sleep&#xff09;注意事项图形界面操作 在 Ubuntu 系统中&#xff0c;挂起&#xff08;Suspend&#xff09;和休眠&#xff08;Hibernate&am…...

【R语言编程绘图-mlbench】

mlbench库简介 mlbench是一个用于机器学习的R语言扩展包&#xff0c;主要用于提供经典的基准数据集和工具&#xff0c;常用于算法测试、教学演示或研究场景。该库包含多个知名数据集&#xff0c;涵盖分类、回归、聚类等任务。 包含的主要数据集 BostonHousing 波士顿房价数据…...

云服务器部署Gin+gorm 项目 demo

更多个人笔记见&#xff1a; &#xff08;注意点击“继续”&#xff0c;而不是“发现新项目”&#xff09; github个人笔记仓库 https://github.com/ZHLOVEYY/IT_note gitee 个人笔记仓库 https://gitee.com/harryhack/it_note 个人学习&#xff0c;学习过程中还会不断补充&…...

MySQL数据一致性守护者:pt-table-checksum原理与实战全解析

MySQL数据一致性守护者:pt-table-checksum原理与实战全解析 在MySQL主从复制环境中,数据一致性是DBA和运维人员最关心的问题之一。主从数据不一致可能导致业务逻辑错误、报表数据失真甚至系统故障。Percona Toolkit中的pt-table-checksum工具正是为解决这一痛点而生,它能够…...

检索器组件深入学习与使用技巧 BaseRetriever 检索器基类

1. BaseRetriever 检索器基类 在 LangChain 中&#xff0c;传递一段 query 并返回与这段文本相关联文档的组件被称为 检索器&#xff0c;并且 LangChain 为所有检索器设计了一个基类——BaseRetriever&#xff0c;该类继承了 RunnableSerializable&#xff0c;所以该类是一个 …...

Unity——QFramework工具 AciontKit时序动作执行系统

AciontKit 是一个时序动作执行系统。 游戏中&#xff0c;动画的播放、延时、资源的异步加载、网络请求等&#xff0c;这些全部都是时序任务&#xff0c;而 ActionKit&#xff0c;可以把这些任务全部整合在一起&#xff0c;使用统一的 API&#xff0c;来对他们的执行进行计划。…...

【Doris基础】Doris中的Replica详解:Replica原理、架构

目录 1 Replica基础概念 1.1 什么是Replica 1.2 Doris中的副本类型 2 Doris副本架构设计 2.1 副本分布机制 2.2 副本一致性模型 3 副本生命周期管理 3.1 副本创建流程 3.2 副本恢复机制 4 副本读写流程详解 4.1 写入流程与副本同步 4.2 查询流程与副本选择 5 副本…...

【中国·广州】第三届信号处理与智能计算国际学术会议 (SPIC2025) 即将开启

第三届信号处理与智能计算国际学术会议 (SPIC2025) 即将开启 在信息技术飞速发展的当下&#xff0c;信号处理与智能计算作为前沿科技领域&#xff0c;正深刻改变着我们的生活与产业格局。为汇聚全球顶尖智慧&#xff0c;推动该领域进一步突破&#xff0c;第三届信号处理与智能…...

Android12 Launcher3显示所有应用列表

Android12 Launcher3显示所有应用列表 1.前言&#xff1a; 最近在Android12Rom定制时需要显示所有桌面应用的图标&#xff0c;并且不能去掉抽屉&#xff0c;在手机上面抽屉和所有应该列表是两种不同模式&#xff0c;用户基可以自行选择&#xff0c;但是在自定义的launcher中这…...

24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务

SP.IdentityService 项目为微服务架构中的核心认证中心&#xff0c;采用 OpenIddict 框架实现 OAuth2.0 和 OpenID Connect 协议&#xff0c;提供完整的身份认证和授权解决方案。项目集成了 ASP.NET Core Identity 框架&#xff0c;实现了用户管理、角色权限控制等基础功能&…...

基于React Native开发鸿蒙新闻类应用的实战开发笔记

以下为基于React Native开发鸿蒙新闻资讯类应用的实战开发笔记&#xff0c;结合架构特性与踩坑经验&#xff0c;重点记录关键实现方案和技术决策&#xff1a; 一、环境搭建与工程初始化&#xff08;关键步骤复盘&#xff09; ​​Node.js版本锁定​​ 必须使用​​Node 18​​&…...

[Java 基础]运算符,将盒子套起来

在 Java 中&#xff0c;运算符&#xff08;Operator&#xff09;用于执行特定的操作&#xff0c;例如数学计算、赋值、比较等。运算符是 Java 语言的重要组成部分&#xff0c;能够帮助我们高效地操作数据。 1. 算术运算符 运算符说明示例结果加法5 38-减法5 - 32*乘法5 * 31…...

智能快递地址解析接口如何用PHP调用?

一、什么是智能快递地址解析接口 随着互联网技术的普及和电子商务的迅猛发展&#xff0c;网购已成为现代人日常生活的重要组成部分。然而&#xff0c;在这个便捷的背后&#xff0c;一个看似不起眼却影响深远的问题正悄然浮现——用户填写的快递地址格式混乱、信息不全甚至错漏…...

华为OD机试真题——模拟消息队列(2025B卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《模拟消息队列》: 目录 题…...