蓝桥杯官网题目:2.包子凑数

在这里插入图片描述

链接:题目点这里

首先要知道一个数学定理裴蜀定理,还有完全背包的基本运用,这里只介绍前者

也可以看一下我的个人理解,我是第一次听说这个定理,理解可能有误差。

  • 假设gcd(a,b)=d,gcd是最大公约数的意思。即a,b的最大公约数是d
  • ax+by=m(x,y是任意整数,可正可负)
  • 对于所有的m,一定会被d整除,即m%d=0

可以尝试画出ax+by=z的三维立体图,很显然是一个空间平面。
在这里插入图片描述

z是一个未知数,它的取值有无数个,如果在三维坐标系中看,那么是所有的z(z可以被gcd(a,b)整除)。
换句话说,ax+by表示的数的集合是{实数中所有的可以被gcd(a,b)整除的数}。

  • 以下考虑a,b互质

  • a,b如果是互质的,那么
    g c d ( a , b ) = 1 gcd(a,b)=1 gcdab=1

  • 那么ax+by可以构成所有的整数:

    {ax+by | x ∈ x\in xN, y ∈ y\in yN, a x + b y ∈ ax+by\in ax+byN}

  • 当x,y都是正整数的时候,包括0。ax+by不能表示的最小数是:
    ( a − 1 ) ∗ ( b − 1 ) − 1 (a-1)*(b-1)-1 (a1)(b1)1

  • 也就是说,ax+by可以表示大于(a-1)*(b-1)-1的所有正整数

回到题目
看懂了上面的数学基础应该这个题就比较清晰了。

那我就直接上代码了,不懂的评论区留言

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e4+1;  //只需要比ax+by的最小值大1就可以了。
const int M = 110;
long long int dp[N];  //dp[i]=j表示取i种包子的方案数是j
//dp[i]=dp[i-a[1]]+dp[i-a[2]]+dp[i-a[3]]+....+dp[i-a[n]]; 
//即,取i种包子的方案数等于取[i-a[1]]包子的方案数+[i-a[2]]包子的方案数+...+[i-a[n]]包子的方案数
int a[M];
int sum = 0;int gcd(int a, int b)  //辗转相除法
{if (a < b)swap(a, b);  //大的数是被除数int r = a % b;   //余数if (r == 0)return b;else{a = b;b = r;}return gcd(a, b);
}int main()
{int n;cin >> n;int k;for (int i = 1; i <= n; i++)  //找最大公约数{cin >> a[i];if (i == 1)k = a[i];elsek = gcd(k, a[i]);}if (k != 1)cout << "INF";   //如果最大公约数不是1,那么就会有无穷个数取不到。else  //说明最大公约数是1,那么ax+by的值是所有1的倍数,ax+by此时表示整数集(所有整数){sort(a + 1, a + n + 1);dp[0] = 1;  //取0种包子的方案数是1,即不取,这个必须要有,是很重要的边界初始化for (int i = 1; i <= N; i++)  //枚举包子的个数{for (int j = 1; j <= n; j++)  //然后更新当前包子个数的方案数{if (i - a[j] < 0)break;dp[i] += dp[i - a[j]];}if (dp[i] == 0)  //退出内嵌for循环判断i个包子的方案数是否是0,如果是,说明这个数不能被构成sum++;}cout << sum << endl;}return 0;
}

对裴蜀定理有兴趣的可以关注我这篇博客,我会从cf和leetcode等网站更新相关内容,将会以链接形式帖在本篇下面

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

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

相关文章

fabric.js 组件 图片上传裁剪并进行自定义区域标记

目录 0. 前言 1. 安装fabric与引入 2. fabric组件的使用 3. 属性相关设置 4. 初始化加载 4. 方法 5. 全代码 0. 前言 利用fabric组件&#xff0c;实现图片上传、图片”裁剪“、自定义的区域标记一系列操作 先放一张效果图吧&#x1f447; 1. 安装fabric与引入 npm i …

随身WiFi到底能不能买?一篇文章给你讲清楚!随身WiFi哪个品牌最靠谱 ,随身WiFi推荐第一名

随着移动设备的普及&#xff0c;人们对无线网络的需求越来越高。传统WiFi虽然覆盖面广&#xff0c;但移动性差&#xff0c;不能满足人们在外出、旅行或商务场合的上网需求。此时&#xff0c;随身WiFi的出现填补了这一空白。那么&#xff0c;随身WiFi究竟有何优势和劣势&#xf…

Zabbix 系统监控详解

1 介绍 1.1 摘要 本文深入浅出&#xff0c;切近实际运维应用&#xff0c;由 zabbix 3.4 版本入手&#xff0c;学习 zabbix 监控告警实现方式&#xff0c;由 zabbix 5.0 浅出实现快速部署、快速应用。本人从业多年&#xff0c;关注 zabbix 开源社区&#xff0c;以及 zabbix 官…

【开发必备】泳道图编辑工具及使用

1.什么是泳道图 事情的起因在与博主要和几位小伙伴一起开发一个小程序&#xff0c;那么涉及的人多时就需要用到需求文档这个玩意。然后博主当然要扛起写需求文档这项项目经理 &#xff08;牛马&#xff09;的职责了&#xff01; 然后&#xff0c;博主就发现需求文档中一个看似…

【C++算法】构建最优哈夫曼树

【C算法】构建最优哈夫曼树 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2024.1.20 前言&#xff1a;本篇博客的代码均为自己独立完成&#xff0c;可能会有瑕疵 代码实现 #include <iostream> #include <vector> #include <queue> using namespace std…

idea上传本地项目到gitlab

1. idea上传本地项目到gitlab 1. 配置idea里本地安装的git位置 即选择 Settings -> Version Control -> Git -> Path to Git executable 2. 在idea创建本地仓库 即选择 VCS -> Create Git Repository 然后选择目录&#xff0c;默认就是选择的当前项目&#xff…

【Linux】03 GCC编译器的使用

一、编译过程 在使用gcc编译程序时&#xff0c;编译过程可以简要划分为4个阶段&#xff1a; 预处理、编译、汇编、链接 1.1 预处理&#xff08;preprocessing&#xff09; 这个阶段主要处理源文件中的#indef、#include和#define预处理命令&#xff1b; 这里主要是把一些include…

低代码开发让量化交易插上翅膀

随着技术的不断发展&#xff0c;低代码开发平台逐渐在各个领域崭露头角。其中&#xff0c;量化交易是一个领域&#xff0c;通过低代码开发平台&#xff0c;使得量化交易策略的开发和实施更加高效、灵活和可持续。 量化交易是基于算法和数学模型的自动化交易策略&#xff0c;近年…

RT-DETR算法优化改进:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和RT-DETR结合,助力涨点 DCNv4优势:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DC…

Linux指令(四)

1.more指令 我们知道cat指令是用来读取文本文件的&#xff0c;但是如果是大文件&#xff0c;其实是不适合cat读取的&#xff0c;原因是&#xff1a;cat读取会直接到文本的结尾&#xff0c;所以我们引入&#xff1a;more指令 该指令不会将文件直接读到结尾&#xff0c;而是将最…

Cocos creator 的事件处理(鼠标事件、键盘事件、触摸事件、自定义事件、控制精灵移动Demo)

鼠标事件 //鼠标事件this.node.on(cc.Node.EventType.MOUSE_DOWN, (e: cc.Event.EventMouse) > {cc.log(e.getLocation() "")if (e.getButton() cc.Event.EventMouse.BUTTON_LEFT) {cc.log("鼠标左键")}})键盘事件 //键盘事件cc.systemEvent.on(cc.Sy…

Python中二维数据(数组、列表)索引和切片的Bug

Python中有关数据结构索引和切片引起的Bug 一维数据索引和切片一维数组一维列表 二维数据的索引和切片二维数组二维(错误)列表 一维数据索引和切片 一维数组 对于一维数据进行索引和切片操作&#xff0c;大家都比较熟悉通过下面代码进行实现 import numpy as np data np.ra…

AP1400-2-HW1---一个c++的线性代数库

&#xff08;1&#xff09;random库&#xff08;随机数矩阵&#xff09;&#xff1a; 1. &#xff08;1&#xff09;std::random_device是一个产生非确定性随机数的类。 在大多数情况下&#xff0c;它会产生基于硬件的随机数&#xff0c;比如通过硬件噪声等方式。 &#xff…

[陇剑杯 2021]webshell

[陇剑杯 2021]webshell 题目做法及思路解析&#xff08;个人分享&#xff09; 问一&#xff1a;单位网站被黑客挂马&#xff0c;请您从流量中分析出webshell&#xff0c;进行回答&#xff1a; 黑客登录系统使用的密码是_____________。 题目思路&#xff1a; 分析题目&…

logstack 日志技术栈-02-ELK 的缺点?loki 更轻量的解决方案?

ELK/EFK日志系统 如果今天谈论到要部署一套日志系统&#xff0c;相信用户首先会想到的就是经典的ELK架构&#xff0c;或者现在被称为Elastic Stack。 Elastic Stack架构为Elasticsearch Logstash Kibana Beats的组合&#xff0c;其中&#xff0c;Beats负责日志的采集&…

多表形成树形结构

多表形成树形结构&#xff1a; package com.js.archive.assistant.domain.vo;import com.js.core.domain.vo.BaseVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode;import…

mysql中建立一个用户,只能看到某个指定的数据库

MySQL用户管理及权限控制 在MySQL数据库中&#xff0c;用户管理和权限控制是非常重要的功能。通过正确地设置用户和权限&#xff0c;可以保护数据库的安全性&#xff0c;防止未授权的访问和数据泄露。本文将介绍如何在MySQL中创建一个用户&#xff0c;并限制该用户只能访问特定…

假设检验:以样本服从二项分布举例

目录 假设检验一、假设检验的思想二、假设检验的基本步骤1. 确定要进行检验的假设2. 选择检验统计量3. 确定用于做决策的拒绝域4. 求出检验统计量的值5. 查看样本结果是否位于拒绝域内6. 做出决策 三、举例说明例子1——某公司治疗打鼾例子2——女士品茶的故事 假设检验 一、假…

用Photoshop来制作GIF动画

录了个GIF格式的录屏文件&#xff0c;领导让再剪辑下&#xff0c;于是用Photoshop2023&#xff08;PS版本低至CS6操作方式一样&#xff09;进行剪辑&#xff0c;录屏文件有约1400帧&#xff0c;由于我处理的帧数太多&#xff0c;PS保存为GIF格式时&#xff0c;还是挺耗时的&…

【Docker】网络配置及自定义网络的使用

一、引言 1、什么是网络配置 Docker的网络配置主要是指Docker容器与外部网络之间的连接设置&#xff0c;包括容器内部的IP地址、端口号等。Docker提供了多种网络模式&#xff0c;包括bridge、host、none等&#xff0c;以满足不同的需求。 默认情况下&#xff0c;Docker使用brid…