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

(DP)买不到的数目【蓝桥杯】(裴蜀定理)

买不到的数目

小明开了一家糖果店。

他别出心裁:把水果糖包成4颗一包和7颗一包的两种。

糖果不能拆包卖。

小朋友来买糖的时候,他就用这两种包装来组合。

当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。

你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。

大于17的任何数字都可以用4和7组合出来。

本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

输入格式

两个正整数 n,m,表示每种包装中糖的颗数。

输出格式

一个正整数,表示最大不能买到的糖数。

数据范围

2≤n,m≤1000,保证数据一定有解。

输入样例:

4 7

输出样例:

17

前提条件:给定a,b,若d=gcd(a,b)>1(即最大公约数>1),则一定不能凑出最大数。

因为若d>1,则a和b一定是d的倍数,那么a和b凑出来的数也肯定是d的倍数,所以一定不会存在一个最大数,使得这个数之后的数字都能被a和b凑出来

结论: 如果 a,b均是正整数且互质,那么由 ax+by,x≥0,y≥0不能凑出的最大数是 (a−1)(b−1)−1(这是定理,证明很难,记住定理即可)

互质:最大公约数为1

裴蜀定理:若a,b的最大公约数为d,怎一定存在两个整数p,q使得ap+bq=d,只要ab互质,则一定有解

若ab互质,则一定存在ap+bq=1,两边同时乘以m  =>  apm+bqm=m  =>  (am-q)p+(bm+p)q=m

方法1. 暴力搜索(打表找规律,会超时,AC50%)

        当要凑的数字减到0的时候,说明凑出来了
        先尝试用p来凑,要凑的数字变成m-p
        再尝试用q来凑,要凑的数字变成m-q
        如果都凑不出来,则返回false

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int n,m,ans;
bool dfs(int m,int p,int q){if(!m) return true;if(m>=p&&dfs(m-p,p,q)) return true;if(m>=q&&dfs(m-q,p,q)) return true;return false;
}
int main(){cin>>n>>m;for(int i=1;i<=1000;i++){if(!dfs(i,n,m)) ans=i;}cout<<ans<<endl;return 0;
}

根据这个暴力搜索我们可以打表找规律,如下:

3 2 1
3 4 5
3 5 7
3 7 11
3 8 13


大致可以发现规律为n=3时,m+1,ans+2
故ans=2m+x
代入数据得x=-3
推得公式为ans=2m-3;(n=3)
同理,多推几个公式

4 7 17
4 9 23
4 11 29

ans=3m-4(n=4)
最后整理得到大致公式ans=(n-1)*(m-1)-1.

方法2.利用公式直接输出答案:(p-1)(q-1)-1

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int main(){cin>>n>>m;cout<<(n-1)*(m-1)-1<<endl;return 0;
}

相关文章:

(DP)买不到的数目【蓝桥杯】(裴蜀定理)

买不到的数目 小明开了一家糖果店。 他别出心裁&#xff1a;把水果糖包成4颗一包和7颗一包的两种。 糖果不能拆包卖。 小朋友来买糖的时候&#xff0c;他就用这两种包装来组合。 当然有些糖果数目是无法组合出来的&#xff0c;比如要买 10 颗糖。 你可以用计算机测试一下&#…...

Docker使用DockerFile部署Go项目

Docker使用DockerFile部署Go项目1. 文章说明2. Go项目打包到Linux2.1 学习链接与知识点2.2. 打包生成 main 文件2.3 Docker部署Go项目1. 文章说明 目的&#xff1a;将打包生成的 main 文件&#xff0c;在Docker里面&#xff0c;使用Dockerfile文件&#xff0c;生成镜像与容器&…...

C++ Primer第五版_第七章习题答案(31~40)

文章目录练习7.31练习7.32练习7.33练习7.34练习7.35练习7.36练习7.37练习7.38练习7.29练习7.40练习7.31 定义一对类X 和Y&#xff0c;其中X 包含一个指向 Y 的指针&#xff0c;而Y 包含一个类型为 X 的对象。 class Y;class X{Y* y nullptr; };class Y{X x; };练习7.32 定义你…...

基于springboot实现学生成绩管理系统【源码+论文】分享

基于springboot实现学生成绩管理系统演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&…...

Linux diff 命令

Linux diff 命令用于比较文件的差异。 diff 以逐行的方式&#xff0c;比较文本文件的异同处。如果指定要比较目录&#xff0c;则 diff 会比较目录中相同文件名的文件&#xff0c;但不会比较其中子目录。 语法 diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数&g…...

unity动画状态机

介绍&#xff1a; 动画状态机&#xff08;Animation State Machine&#xff09;是Unity中用于控制动画状态转换的工具&#xff0c;它由多个状态&#xff08;State&#xff09;和转换&#xff08;Transition&#xff09;组成&#xff0c;可以通过状态转换来控制动画的播放行为。…...

溯源(五)之攻击源的获取

溯源&#xff08;一&#xff09;之溯源的概念与意义 溯源&#xff08;二&#xff09;之 windows-还原攻击路径 溯源&#xff08;三&#xff09;之Linux-入侵排查 溯源&#xff08;四&#xff09;之流量分析-Wireshark使用 溯源整体流程的思维导图 攻击源的获取 1、获取哪些数…...

【redis】redis淘汰策略

一、说明 1.redis key没有设置过期时间被redis主动删除了 2.当redis已用内存超过maxmemory限定时&#xff0c;触发主动清理策略 3.主动清理策略在redis4.0之前一共实现了6种内存淘汰策略&#xff0c;在4.0之后&#xff0c;增加了2种&#xff0c;总共8种 二、淘汰策略 2.1 针对…...

指针和数组(二)

目录 指针和数组 数组名和指针的区别 多维数组 数组指针 语法 作用 内存大小 自增运算 【】运算 指针和数组 结论&#xff1a;数组的本质就是指针。数组的【】运算同样可以用指针来运算 证明 C代码 int array[5];int* ptr{ &array[0] };*ptr 5;array[0] 5;arr…...

Linux WIFI 驱动实验

目录WIFI 驱动添加与编译向Linux 内核添加WIFI 驱动配置Linux 内核编译WIFI 驱动驱动加载测试wireless tools 工具移植与测试wireless tools 移植wireless tools 工具测试wpa_supplicant 移植openssl 移植libnl 库移植wpa_supplicant 移植WIFI 联网测试RTL8188 USB WIFI 联网测…...

UART驱动情景分析-write

一、write过程分析 App写&#xff1a; 使用行规程来写数据最终存入uart_state->xmit的buffer里 硬件发送&#xff1a; 使用硬件驱动中uart_ops->start_tx开始发送具体的发送方式有两种&#xff1a;通过DMA、通过中断 中断方式&#xff1a; 方法1&#xff1a;直接使能tx …...

Metasploit入门到高级【第四章】

来自公粽号&#xff1a;Kali与编程预计更新第一章&#xff1a;Metasploit 简介 Metasploit 是什么Metasploit 的历史和发展Metasploit 的组成部分 第二章&#xff1a;Kali Linux 入门 Kali Linux 简介Kali Linux 安装和配置常用命令和工具介绍 第三章&#xff1a;Metasploi…...

java 继承super

在java继承中&#xff0c;如果子类继承父类&#xff0c;在子类中要给用构造器给父类的属性赋值&#xff0c;需要用到 super 举例&#xff0c;Son类继承Father 类&#xff0c;便于理解 在 new Son(String name, int age) 传入name&#xff0c;和age的值 将会调用Son这个构造器…...

Java学习笔记——多态

2.1 概述 引入 多态是继封装、继承之后&#xff0c;面向对象的第三大特征。 生活中&#xff0c;比如跑的动作&#xff0c;小猫&#xff0c;小狗和大象&#xff0c;跑起来都是不一样的。再比如飞的动作&#xff0c;昆虫、鸟类和飞机&#xff0c;飞起来是不一样的。可见&#x…...

Python处理JSON数据

Python和JSON JavaScript Object Notation (JSON) 是一种轻量级的数据交换格式&#xff0c;通常用于Web应用程序之间的数据交换。JSON的设计使得它非常易于人和机器阅读和编写。JSON数据格式与Python数据结构非常相似&#xff0c;因此Python中提供了一个json模块&#xff0c;用…...

JVM信息查询命令

1、查询jar包运行进程 jps #通过jps命令找出jar的进程IDps -ef|grep xxxx #通过包名找出进程ID2、查询JVM的堆信息 jmap -heap pid #通过jmap命令查询堆信息rootd57bff9f-c8nvn:/apps# jmap -heap 6 Picked up JAVA_TOOL_OPTIONS: -Xloggc:/data/tsf_apm/monitor/jvm…...

redis 面试题

&#x1f355; redis 面试题常规问题什么是 Redis&#xff1f;为什么要使用 Redis&#xff1f;Redis 一般有哪些使用场景&#xff1f;Redis 为什么快&#xff1f;数据类型和数据结构Redis有哪些数据类型&#xff1f;常用操作和应用Bitmaps (位图) | 二进制计数与过滤计数器记录…...

SpringCloud微服务技术栈.黑马跟学(十二)

SpringCloud微服务技术栈.黑马跟学 十二今日目标服务异步通信-高级篇1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化1.3.消费者消息确认1.3.1.演示none模式1.3…...

HashMap集合存储学生对象并遍历

需求&#xff1a;创建一个HashMap集合&#xff0c;键是学生对象&#xff08;Student&#xff09;,值是居住地。存储多个键值对元素&#xff0c;并遍历。 要求保证键的唯一性&#xff1a;如果学生对象的成员变量值相同&#xff0c;我们就认为是同一个对象 思路&#xff1a; 定义…...

“提效”|教你用ChatGPT玩数据

ChatGPT与数据分析&#xff08;二&#xff09; 上文给简单聊了一下为什么ChatGPT不能取代数据分析师&#xff0c;本文我们来深入感受一下如何让GPT帮助数据分析师“提效”。 场景一&#xff1a;SQL取数 背景&#xff1a;多数数据分析师都要用SQL语言从数据库中提取数据&#x…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...