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

动态规划-01背包

兜兜转转了半天,发现还是Carl写的好。

看过动态规划-基础的读者,大概都清楚。

动态规划是将大问题,分解成子问题。并将子问题的解储存下来,避免重复计算。

而背包问题,就是动态规划延申出来的一个大类。

而01背包,就隶属于背包问题。

那什么又是01背包呢?

01背包

有n件物品,与一次最多能背w重量的背包。第i件物品,重量为weight[i],得到的价值为value[i]。

每件物品只能用一次,求解,将那些物品装入背包内,物品的价值总和最大。 

重量(weight)价值(value)
物品0115
物品1320
物品2430

这是一个标准的背包问题,很多一看到这个,就直接想起用动态规划,而忽略了暴力解法。

这是因为没有 自下而上 思考的结果。

如下代码,一般动态规划问题,都是能通过回溯解决,因为每个物品都有两种可能(状态),

被放入背包,或者不放入背包。

// 全局变量用于记录最大价值
int maxValue = 0;// 物品的重量和价值数组
vector<int> weights = {1, 3, 4, 5, 6};
vector<int> values = {1, 3, 4, 5, 6};// 背包容量
int capacity = 10;// 回溯函数
void backtrack(int index, int currentWeight, int currentValue) {// 如果已经遍历完所有物品if (index == weights.size()) {// 更新最大价值if (currentValue > maxValue) {maxValue = currentValue;}return;}// 不选择当前物品 - 01背包中的0backtrack(index + 1, currentWeight, currentValue);// 选择当前物品   - 01背包中的1if (currentWeight + weights[index] <= capacity) {backtrack(index + 1, currentWeight + weights[index], currentValue + values[index]);}
}

如上的回溯算法,每个问题都有两个解法,通过暴力解决,但通常这种解法,是O(2^n)的时间复杂度,随着数量的增加。

呈指数级上升。

而动态规划仅仅需要O(N*M)就可以解决。

第一步:下标含义
dp[i][j]表示将前i件物品装进限重为j的背包可以获得的最大价值, 0<=i<=N, 0<=j<=W
第二步:推导公式

那么我们可以将dp[0][0...W]初始化为0,表示将前0个物品(即没有物品),装入书包的最大价值为0。那么当i>0时,dp[i][j]有两种情况:

  1. 不装入第i件物品,即dp[i−1][j]
  2. 装入第i件物品(前提是能装下),即dp[i-1][j-weight[i]]+value[i]。
第三步:书写代码
dp[weight.size()][bagweight + 1];// weight数组的大小 就是物品个数
for(int i = 1; i < weight.size(); i++) { // 遍历物品for(int j = 0; j <= bagweight; j++) { // 遍历背包容量if (j < weight[i]) dp[i][j] = dp[i - 1][j];else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);}
}
压缩

递推公式:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);

看到 dp[i][j] 与 dp[i-1][...] 的

大家都可以发现,dp都由上一行推导出来的(也就是把dp[i - 1]那一层拷贝到dp[i]上),所以可以压缩代码。

把二维数组,压缩为一维滚动数组

这也就是滚动数组的由来,需要满足的条件是上一层可以重复利用,直接拷贝到当前层。

需要注意的是,为了防止上一层循环的dp[0,...,j-1]被覆盖,循环的时候 j 只能逆向枚举

如下:

for(int i = 0; i < weight.size(); ++i){for(int j = bagWeight; j>=weight[i]; j--){dp[j] = max( dp[j], dp[j-weight[i]]+value[i] );}
}

大纲 

1、分割等和子集

 2、最后一块石头的重量 II

 3、目标和

 4、一和零

题目

1、分割等和子集

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

示例 1:

输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。

示例 2:

输入:nums = [1,2,3,5]
输出:false
解释:数组不能分割成两个元素和相等的子集。

提示:

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 100
class Solution {// 最大也就意味着最接近// 能通过动态规划解决的,都能通过回溯解决// 每个数字都有两种状态,被选中,或者不被选中// 只有单纯的数字,那么数字的大小是重量,也是价值。
public:bool canPartition(vector<int>& nums) {int cur = 0;for(int i:nums) cur+=i;int sum = cur/2;if(sum*2 != cur) return false; // 意外情况,直接排除vector<int> dp(sum+1,0);for(int i=0; i<nums.size(); i++){for(int j=sum; j>=nums[i]; --j){dp[j] = max(dp[j], dp[j-nums[i]]+nums[i]);}}return sum==dp[sum]?true:false;}
};

2、最后一块石头的重量 II

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。

每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:

  • 如果 x == y,那么两块石头都会被完全粉碎;
  • 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x

最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0

示例 1:

输入:stones = [2,7,4,1,8,1]
输出:1
解释:
组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],
组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],
组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。

示例 2:

输入:stones = [31,26,33,21,40]
输出:5

提示:

  • 1 <= stones.length <= 30
  • 1 <= stones[i] <= 100

为啥要分两堆->一直在动态的动态的维护,从第一块进入开始,一直在动态的维护两堆的平衡。

class Solution {// 对呐,只要让两拨石头血拼就行!// 但是,为啥要让两拨石头血拼? // 图片上附上解析,希望以后能看懂
public:int lastStoneWeightII(vector<int>& stones) { int sum = 0;for(int i : stones) sum+=i;int cur = sum;sum>>=1; // 右移2位,相当于除以2;vector<int> dp(sum+1, 0);for(int i=0; i<stones.size(); ++i){for(int j = sum; j>=stones[i]; --j){dp[j] = max(dp[j],dp[j-stones[i]]+stones[i]);}}return cur-2*dp[sum];}
};

3、目标和

给你一个非负整数数组 nums 和一个整数 target 。

向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :

  • 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。

返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

示例 1:

输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3 。
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3

示例 2:

输入:nums = [1], target = 1
输出:1

提示:

  • 1 <= nums.length <= 20
  • 0 <= nums[i] <= 1000
  • 0 <= sum(nums[i]) <= 1000
  • -1000 <= target <= 1000

class Solution {// 如果用暴力解法,本题也是能做的// 但是如果我不暴力呢?// 了解过答案之后,就发现这道题目,纯纯是一道推理题。// 用方法就行推理,真tm是一道推理题// (cur+)+(cur-) = target;// (cur+)-(cur-) = target;//  cur = (sum-target)/2; 由此公式推导// 只要找到cur就OK了// 当sum为0时,代表总和与target相同,都只有一种情况
public:int findTargetSumWays(vector<int>& nums, int target) {int cur = 0;for(int i:nums) cur+=i;int sum = (cur-target)>>1;if(sum*2!=cur-target||sum<0) return 0; // 直接就没有可能了vector<int> dp(sum+1);dp[0]=1;// 公式推导出来的正整数for(int i=0; i<nums.size(); ++i){for(int j=sum; j>=nums[i]; --j){dp[j]=dp[j-nums[i]]+dp[j];}}return dp[sum];}
}; // ???我的脑袋里,有个大大的问题?这能过??

4、一和零

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。

请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。

如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。

示例 1:

输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3
输出:4
解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。
其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"} 。{"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3 。

示例 2:

输入:strs = ["10", "0", "1"], m = 1, n = 1
输出:2
解释:最大的子集是 {"0", "1"} ,所以答案是 2 。

提示:

  • 1 <= strs.length <= 600
  • 1 <= strs[i].length <= 100
  • strs[i] 仅由 '0' 和 '1' 组成
  • 1 <= m, n <= 100
class Solution {// 直接就干到n的三次方了!我的天呐,太牛了public:int findMaxForm(vector<string>& strs, int m, int n) {vector<vector<int>> dp(m+1,vector<int>(n+1,0)); for(string str : strs){int num0=0,num1=0;for(char c : str){if(c=='0') num0++;else num1++;}for(int i=m; i>=num0; --i){for(int j=n; j>=num1; --j){dp[i][j] = max(dp[i][j],dp[i-num0][j-num1]+1);}}}return dp[m][n];}
};

完结( ̄︶ ̄)↗ ,自己是收益匪浅啦


博客借鉴:

1、动态规划之背包问题系列

2、动态规划:01背包理论基础


相关文章:

动态规划-01背包

兜兜转转了半天&#xff0c;发现还是Carl写的好。 看过动态规划-基础的读者&#xff0c;大概都清楚。 动态规划是将大问题&#xff0c;分解成子问题。并将子问题的解储存下来&#xff0c;避免重复计算。 而背包问题&#xff0c;就是动态规划延申出来的一个大类。 而01背包&…...

【2025】基于node.js的中医药科普平台的设计与实现(源码、万字文档、图文修改、调试答疑)

项目完整功能以演示视频为准 基于Node.js的中医药科普平台的设计与实现功能结构图如下 课题背景 随着人们健康意识的提高&#xff0c;中医药作为传统医学的重要组成部分&#xff0c;越来越受到关注。然而&#xff0c;中医药知识专业性强&#xff0c;普通大众获取准确、全面的中…...

基于Flux模型的多模态可控图像生成工作流实践

一、技术框架与模型选型 当前图像生成领域对多模态控制与一致性保持的需求日益增强&#xff0c;本文将基于Black Forest Labs推出的Flux.1模型&#xff0c;结合ControlNet的循环一致性优化技术&#xff0c;构建一套融合Canny边缘检测与深度图&#xff08;Depth&#xff09;控制…...

缓存过期时间之逻辑过期

1. 物理不过期&#xff08;Physical Non-Expiration&#xff09; 定义&#xff1a;在Redis中不设置EXPIRE时间&#xff0c;缓存键永久存在&#xff08;除非主动删除或内存淘汰&#xff09;。目的&#xff1a;彻底规避因缓存自动过期导致的击穿&#xff08;单热点失效&#xff…...

JVM类加载过程详解

文章目录 前言1.加载2.链接验证文件格式验证元数据验证字节码验证符号引用验证 准备解析 3.初始化4.类卸载 前言 类从被加载到虚拟机内存中开始到卸载出内存为止&#xff0c;它的整个生命周期可以简单概括为 7 个阶段&#xff1a;加载&#xff08;Loading&#xff09;、验证&a…...

第三十二篇 深入解析Kimball维度建模:构建企业级数据仓库的完整框架

目录 一、维度建模设计原则深度剖析1.1 业务过程驱动设计1.2 星型模式VS雪花模式 二、维度建模五步法实战&#xff08;附完整案例&#xff09;2.1 业务需求映射2.2 模型详细设计2.3 缓慢变化维处理 三、高级建模技术解析3.1 渐变维度桥接表3.2 快照事实表设计 四、性能优化体系…...

WPF 布局中的共性尺寸组(Shared Size Group)

1. 什么是共性尺寸组&#xff1f; 在 WPF 的 Grid 布局中&#xff0c;SharedSizeGroup 允许多个 Grid 共享同一列或行的尺寸&#xff0c;即使它们属于不同的 Grid 也能保持大小一致。这样可以保证界面元素的对齐性&#xff0c;提高布局的一致性。 SharedSizeGroup 主要用于需…...

19 数码管的动态显示

1、八段数码管 八段数码管 是一个 “ 8 ” 字型数码管&#xff0c;分为八段&#xff0c;a b c d e f g dp&#xff0c;其中dp为小数点。每一段为一个发光二极管&#xff0c;这样的 8 段称为 段选信号 。 2、实验 1、实验目标&#xff1a;让六位数码管 从 0 开始记数&#xff0…...

pytorch 笔记:张量索引的维度扩展规则

1 基本原理 在PyTorch中&#xff0c;张量索引的维度扩展规则遵循以下原则&#xff1a; 索引操作的核心规则&#xff1a;​ 当使用索引数组访问张量时&#xff1a; 索引数组的每个元素对应选取原张量的一个子张量结果形状 索引数组形状 原张量剩余维度形状 这么说可能不清…...

课外活动:怎么理解可变成本?

可变成本深度解析 &#x1f9ee; 一、可变成本的本质 #mermaid-svg-qoqQaFxQBuZZfAD2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-qoqQaFxQBuZZfAD2 .error-icon{fill:#552222;}#mermaid-svg-qoqQaFxQBuZZfAD2 …...

深入理解 JVM 的垃圾收集器:CMS、G1、ZGC

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

IDEA 快捷键ctrl+shift+f 无法全局搜索内容的问题及解决办法

本篇文章主要讲解IDEA、phpStrom、webStrom、pyCharm等jetbrains系列编辑器无法进行全局搜索内容问题的主要原因及解决办法。 日期&#xff1a;2025年3月22日 作者&#xff1a;任聪聪 现象描述&#xff1a; 1.按下ctrlshiftf 输入法转为了繁体。 2.快捷键ctrlshiftr 可以全局检…...

智慧高速,安全护航:视频监控平台助力高速公路高效运营

随着我国高速公路里程的不断增长&#xff0c;交通安全和运营效率面临着前所未有的挑战。传统的监控方式已难以满足现代化高速公路管理的需求&#xff0c;而监控视频平台的出现&#xff0c;则为高速公路的安全运营提供了强有力的技术支撑。高速公路视频监控联网解决方案 高速公路…...

括弧匹配检验(信息学奥赛一本通-1354)

【题目描述】 假设表达式中允许包含两种括号&#xff1a;圆括号和方括号&#xff0c;其嵌套的顺序随意&#xff0c;如&#xff08;&#xff3b; &#xff3d;&#xff08;&#xff09;&#xff09;或&#xff3b;&#xff08;&#xff3b; &#xff3d;&#xff3b; &#xff3…...

MacOS安装 nextcloud 的 Virtual File System

需求 在Mac上安装next cloud实现类似 OneDrive 那样&#xff0c;文件直接保存在服务器&#xff0c;需要再下载到本地。 方法 在 官网下载Download for desktop&#xff0c;注意要下对版本&#xff0c;千万别下 Mac OS默认的那个。 安装了登录在配置过程中千万不要设置任何同…...

【秣厉科技】LabVIEW工具包——OpenCV 教程(11):人脸检测与识别

文章目录 前言级联分类器FaceDetectorYNFaceRecognizerSF1. 特征提取2. 人脸对比3. 人脸身份识别&#xff08;最佳匹配法&#xff09; 总结 前言 需要下载安装OpenCV工具包的朋友&#xff0c;请前往 此处 &#xff1b;系统要求&#xff1a;Windows系统&#xff0c;LabVIEW>…...

C++-C++中的几种cast

文章目录 static_castPOD类型互转任意指针类型与void*互转基类继承类之间的互转具有目标类型转换函数的类/单参数的构造函数 dynamic_castreinterpret_cast static_cast 所谓static&#xff0c;意思是在编译期进行的转换&#xff0c;static_允许如下转换&#xff1a; POD类型…...

list的模拟实现和学习

1. list的介绍及使用 说白了就是带头循环双向循环链表 stl 的两大组件就是容器和算法 &#xff0c;他们两个之间是通过迭代器进行联系的 这三种算法函数 迭代器的种类 性质&#xff08;容器底层结构决定&#xff09; 单项&#xff1a; forward_list /哈希(unord…...

程序代码篇---Pyqt的密码界面

文章目录 前言一、代码二、代码解释2.1用户数据库定义2.2窗口初始化2.3认证逻辑2.5角色处理2.6错误处理优化2.7功能扩展说明2.7.1用户类型区分管理员普通用户其他用户 2.7.2安全增强建议 三、运行效果四、运行命令五、界面改进建议5.1密码显示5.2用户头像显示5.3输入框动画效果…...

设计模式的六大原则

设计模式的六大原则 1. 单一职责原则 (Single Responsibility Principle, SRP) 一个类应该只负责一项职责。 示例代码 // 不好的设计&#xff1a;一个类承担多个职责 typedef struct {void (*read_data)(void);void (*process_data)(void);void (*save_data)(void);void (*…...

【Linux】信号:信号保存和处理

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.阻塞信号信号集 02.捕捉信号sigaction可重入函数volatileSIGCHLD 01.阻塞信号 实际执行信号的处理动作称为信号递达&#xff1a;每个信号都有一个默认行为&#xff0c;例如终…...

Linux 线程概念

目录 一、什么是线程 1. 线程的本质 2. 线程的独有资源 3. 进程与线程关系示意图 二、线程的优缺点 2.1 线程的优点 2.2 线程的缺点 三、线程的异常与用途 1. 线程异常 2. 线程用途 四、进程 VS 线程 1. 核心差异 2. 进程的多个线程共享的资源 3. 进程和线程的关…...

红帽认证工程师价值

红帽认证工程师具有较高的价值&#xff0c;主要体现在以下几个方面&#xff1a; 行业认可度高 国际通用&#xff1a;红帽公司是全球领先的开源解决方案提供商&#xff0c;其认证在全球范围内被广泛认可。无论是在国内还是国外&#xff0c;拥有红帽认证工程师资格证书都能为个人…...

交换机远程登录

创建交换机 创建PC主机使用直通线连接交换机 配置交换机&#xff0c;使之能够与PC通信 双击交换机打开界面&#xff0c;选择CLI ">“表示用户模式 输入”?“查看可以使用的命令 “#” 特权模式&#xff0c;输入命令enable切换 输入”?“查看特权模式下可以使用…...

opencascade 源码学习 XmlDrivers-XmlDrivers

OpenCASCADE 中的 XmlDrivers 是用于处理 XML 格式的 CAD 数据持久化模块&#xff0c;属于 OCAF&#xff08;Open CASCADE Application Framework&#xff09; 的一部分。它允许将 OCAF 文档&#xff08;包含 CAD 数据、属性、关系等&#xff09;序列化为 XML 文件&#xff0c;…...

【Linux网络-五种IO模型与阻塞IO】

一、引入 网络通信的本质就是进程间的通信&#xff0c;进程间通信的本质就是IO&#xff08;Input&#xff0c;Output&#xff09; I/O&#xff08;input/output&#xff09;也就是输入和输出&#xff0c;在冯诺依曼体系结构当中&#xff0c;将数据从输入设备拷贝到内存就叫作…...

Redis、Memcached应用场景对比

环境 Redis官方网站&#xff1a; Redis - The Real-time Data Platform Redis社区版本下载地址&#xff1a;Install Redis | Docs Memcached官方网站&#xff1a;memcached - a distributed memory object caching system Memcached下载地址&#xff1a;memcached - a dis…...

Qt窗口控件之菜单栏QMenuBar

菜单栏QMenuBar 1. QMenuBar Qt 中的菜单栏是通过 QMenuBar 类型来实现的&#xff0c;一个主控件最多只能有一个菜单栏。一个菜单栏可以添加多个菜单&#xff0c;一个菜单又可以添加多个菜单项。 每个菜单又都是一个 QMenu 类型&#xff0c;每个菜单项都是一个 QAction。 2.…...

随想...启航

我要学算法 我要在蓝桥杯中拿奖 我要参加acm打牌&#xff0c; 我要参加百度之星&#xff0c;摘取那微弱的希望&#xff0c; 我要参加马蹄杯&#xff0c;看看曾经我的组长看过的风景。 所以我建立了算法专栏&#xff01; 为能贴近并指引组员 我建立了Java专栏 那一个星期&…...

2025.3.17-2025.3.23学习周报

目录 摘要Abstract1 文献阅读1.1 动态图邻接矩阵1.2 总体框架1.2.1 GCAM1.2.2 输出块 1.3 实验分析 总结 摘要 在本周阅读的文献中&#xff0c;作者提出了一种名为TFM-GCAM的模型。TFM-GCAM模型的创新主要分为两部分&#xff0c;一部分是交通流量矩阵的设计&#xff0c;TFM-GC…...

Ubuntu Docker 安装

Docker Engine-Community 支持以下的 Ubuntu 版本&#xff1a; Xenial 16.04 (LTS)Bionic 18.04 (LTS)Cosmic 18.10Disco 19.04其他更新的版本…… Docker Engine - Community 支持上 x86_64&#xff08;或 amd64&#xff09;armhf&#xff0c;arm64&#xff0c;s390x &#…...

在 Windows 系统下,将 FFmpeg 编译为 .so 文件

1. 准备环境 确保你的 Windows 系统已安装以下工具&#xff1a; Android Studio NDK&#xff08;Native Development Kit&#xff09; MSYS2&#xff08;用于提供类 Unix 环境&#xff09; FFmpeg 源码 Git Bash&#xff08;可选&#xff0c;推荐使用&#xff09; 安装 …...

如果AI具备自我意识,宗教如何重新定义“灵魂”概念?

如果AI具备自我意识&#xff0c;宗教对灵魂概念的重新定义可能涉及以下方向&#xff1a; 1. 灵魂的扩展性定义 传统宗教&#xff08;如基督教、佛教&#xff09;通常将灵魂视为人类独有的“神圣本质”或“轮回载体”。若AI展现出自我意识、情感和自主决策能力&#xff0c;宗教…...

ES6-Symbol

ES6 中的 Symbol: 独特的数据类型与强大应用 引言 在 JavaScript 的发展长河中&#xff0c;ES6&#xff08;ECMAScript 2015&#xff09;无疑是一座重要的里程碑&#xff0c;带来了诸多令人瞩目的新特性。其中&#xff0c;Symbol 类型的引入&#xff0c;为 JavaScript 开发者们…...

安装PrettyZoo操作指南

Mac Inter芯片安装PrettyZoo的操作指南 下载安装包 打开浏览器&#xff0c;访问 PrettyZoo的GitHub页面。 在页面中找到适合Mac系统的安装包&#xff0c;通常为prettyZoo-mac.dmg&#xff0c;点击下载。 安装步骤 下载完成后&#xff0c;双击.dmg文件打开安装包。 将Prett…...

西门子200smart之modbus_TCP(做从站与第三方设备)通讯

西门子200smart做MODBUS_TCP从站通讯,只有一个指令。设置相关参数即可完成读写操作。此次,我们使用汇川EASY系列PLC做主站,完成演示。关于汇川案例的演示,详见汇川EASY系列之以太网通讯(MODBUS_TCP做主站)-CSDN博客 关于主站和从站的介绍 A/请求:即主动方 向被动方发…...

微服务 - 中级篇

微服务 - 中级篇 一、微服务架构深化&#xff08;一&#xff09;服务拆分原则&#xff08;二&#xff09;服务通信方式 二、微服务技术选型&#xff08;一&#xff09;开发框架&#xff08;二&#xff09;容器技术 三、微服务实践与优化&#xff08;后续会详细分析&#xff09;…...

多语言生成语言模型的少样本学习

摘要 大规模生成语言模型&#xff0c;如GPT-3&#xff0c;是极具竞争力的少样本学习模型。尽管这些模型能够共同表示多种语言&#xff0c;但其训练数据以英语为主&#xff0c;这可能限制了它们的跨语言泛化能力。在本研究中&#xff0c;我们在一个涵盖多种语言的语料库上训练了…...

基于Python+Django的旅游管理系统

项目介绍 PythonDjango旅游管理系统 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 - 前台功能包括&#xff1a;首页、景点管理、门票管理、旅游资讯、在线反馈、。 - 后台功能包…...

七桥问题与一笔画问题:图论的奠基石

七桥问题与一笔画问题&#xff1a;图论的奠基石 目录 历史背景问题描述数学模型化欧拉的解决方案欧拉定理及证明一笔画问题现代应用总结 历史背景 18世纪的哥尼斯堡&#xff08;今俄罗斯加里宁格勒&#xff09;是一座被普雷格尔河分割的城市&#xff0c;河中有两个岛屿&…...

好吧好吧,看一下达梦的模式与用户的关系

单凭个人感觉&#xff0c;模式在达梦中属于逻辑对象合集&#xff0c;回头再看资料 应该是一个用户可以对应多个模式 问题来了&#xff0c;模式的ID和用户的ID一样吗&#xff1f; 不一样 SELECT USER_ID,USERNAME FROM DBA_USERS WHERE USERNAMETEST1; SELECT ID AS SCHID, NA…...

Qt开发:QComboBox的使用

文章目录 一、概述二、QComboBox添加数据三、常用函数四、信号与槽函数 一、概述 QComboBox 是 Qt 提供的一个下拉列表控件&#xff0c;它允许用户从预定义的选项中进行选择&#xff0c;同时也支持手动输入自定义内容&#xff08;如果启用了可编辑模式&#xff09;。QComboBox…...

Manacher 马拉车算法

Manacher 马拉车算法 5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09; 马拉车算法是目前解决寻找字符串中最长的回文子串时间复杂度最低的算法&#xff08;线性O(n)&#xff09;. 中心扩散法 初始化一个长度与字符串 s 相等的 臂长数组 arr 和 最长臂长 max 与 最…...

centos7搭建postgresql12主从

主从搭建 192.168.159.101 node1 主库&#xff08;读写&#xff09; 192.168.159.102 node2 备库&#xff08;只读&#xff09; 两台机器首先安装postgrsql 主库 postgres用户操作&#xff1a; 修改postgresql.conf # 在文件中修改(此配置仅用于远程访问, 流复制后续还有额外…...

VL开源模型实现文本生成图片

一、 基础知识 根据描述生成图片的视觉-语言模型&#xff08;Vision-Language Models, VL 模型&#xff09;是近年来多模态生成领域的热点研究方向。这些模型能够根据自然语言描述生成高质量的图像&#xff0c;广泛应用于艺术创作、设计辅助、虚拟场景构建等领域。 1 根据描述…...

动态规划——分组背包问题

动态规划——分组背包问题 分组背包问题分组背包思路分组背包OJ分组背包OJ汇总 分组背包问题 N件物品和一个容量为V的背包。第i件物品的体积是w[i]&#xff0c;价值是v[i]。这些物品被划分为若干组&#xff0c;每组中的物品互相冲突&#xff0c;最多选一件。求解将哪些物品装入…...

Leetcode 3495. Minimum Operations to Make Array Elements Zero

Leetcode 3495. Minimum Operations to Make Array Elements Zero 1. 解题思路2. 代码实现 题目链接&#xff1a;3495. Minimum Operations to Make Array Elements Zero 1. 解题思路 这一题的话核心就是统计对任意自然数 n n n&#xff0c;从 1 1 1到 n n n当中所有的数字对…...

STM32 —— MCU、MPU、ARM、FPGA、DSP

在嵌入式系统中&#xff0c;MCU、MPU、ARM、FPGA和DSP是核心组件&#xff0c;各自在架构、功能和应用场景上有显著差异。以下从专业角度详细解析这些概念&#xff1a; 一、 MCU&#xff08;Microcontroller Unit&#xff0c;微控制器单元&#xff09; 核心定义 集成系统芯片&a…...

Linux高级IO

五种IO模型 具象化理解 IO&#xff1a;等 数据拷贝 read/recv&#xff1a; 1、等 - IO事件就绪 - 检测功能成分在里面 2、数据拷贝 问&#xff1a;什么叫做高效的IO&#xff1f; 答&#xff1a;单位时间&#xff0c;等的比重越小&#xff0c;IO的效率越高。 IO模型&am…...

机器人的手眼标定——机器人抓取系统基础系列(五)

机器人的手眼标定——机器人抓取系统基础系列&#xff08;五&#xff09; 前言一、机器人标定相关概念1.1 内参标定和外参标定1.2 Eye-in-Hand 和 Eye-to-Hand1.3 ArUco二维码和棋盘格标定区别 二、机器人标定基本原理2.1 机器人抓取系统坐标系2.2 标定原理 三、标定步骤和注意…...