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

背包 DP 详解

文章目录

  • 背包DP
    • 01 背包
    • 完全背包
    • 多重背包
      • 二进制优化
      • 单调队列优化
  • 小结

背包DP

背包 DP,说白了就是往一个背包里扔东西,求最后的最大价值是多少,一般分为了三种:01 背包、完全背包和多重背包。而 01 背包则是一切的基础。

01 背包

特点:每个物品只有一个,只能选择装这个物品或者不装。

这时我们一般设一个 dp[i][j] 表示前 i i i 个物品再总体积为 j j j 的情况下装的最大价值是多少。所以 01 背包的时间复杂度为 O ( n 2 ) O(n^2) O(n2),这时我们可以得到这样一个状态转移方程:

d p i , j = max ⁡ { d p i − 1 , j , d p i − 1 , j − v i + w i } dp_{i,j}=\max\{dp_{i-1,j},dp_{i-1,j-v_i}+w_i\} dpi,j=max{dpi1,j,dpi1,jvi+wi}

这里的 v i v_i vi 指当前物品所占的体积, w i w_i wi 指当前物品的价值。

那这是怎么一回事呢?我们可以这样想:我要么不选这件物品,那么总价值就和 d p i − 1 , j dp_{i-1,j} dpi1,j 一样(即同样的体积在前 i − 1 i-1 i1 件物品中的最大价值),如果选了,那就和前 i − 1 i-1 i1 件物品在体积为 j − v i j-v_i jvi 的情况下的最大价值再加上当前物品的价值 w i w_i wi 一样,那再取其中的最大值就行了。

但是,我们会发现一个问题:如果你的总体积为 V V V,总物品数为 n n n,那你的空间复杂度就是 O ( V n ) O(Vn) O(Vn),这可是一个极其庞大的数字,这是我们就要请上我们的滚动背包!

滚动背包旨在通过观察状态转移方程看看哪些空间没用从而可以省掉。比如说上面的状态转移方程,我们会发现 DP 的第一维只与当前状态与上一状态有关,而与其他的无关,所以其它空间就是被浪费了的,所以我们只需要把第一维开个 2 2 2,而不用开 n n n,这样,空间复杂度就被压到了 O ( 2 V ) O(2V) O(2V),状态转移方程也就变成了这样:

d p i m o d 2 , j = max ⁡ { d p ( i − 1 ) m o d 2 , j , d p ( i − 1 ) m o d 2 , j − v i + w i } dp_{i\bmod2,j}=\max\{dp_{(i-1)\bmod2,j},dp_{(i-1)\bmod2,j-v_i}+w_i\} dpimod2,j=max{dp(i1)mod2,j,dp(i1)mod2,jvi+wi}

上面这种方法适用于初学者,因为它清楚直观、浅显易懂。

让我们先来看一道例题:

N N N 件物品和一个容量是 V V V 的背包。每件物品只能使用一次。

i i i 件物品的体积是 v i v_i vi,价值是 w i w_i wi

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。

输出最大价值。

很经典的一道 01 背包问题,直接用上面的公式就对了。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,vv,v[1006],w[1006],dp[2][1006]; 
signed main()
{cin>>n>>vv;for(int i=1;i<=n;i++){cin>>v[i]>>w[i];}for(int i=1;i<=n;i++){for(int j=0;j<=vv;j++){dp[i%2][j]=dp[(i-1)%2][j];if(j>=v[i]){dp[i%2][j]=max(dp[(i-1)%2][j],dp[(i-1)%2][j-v[i]]+w[i]);}}}cout<<dp[n%2][vv];return 0;
}

当然,我们也可以在这个的基础上优化成一维滚动背包,但是中间的循环需要颠倒过来一下,具体我们可以这么想:我们上面的状态转移方程再更新时原本的和现在的状态是不会受影响的,而如果我们正着循环,可能就会出现这种情况:

按照我们之前的状态转移方程,我们应该拿原本的旧的状态来更新新的状态,但现在我们却拿我们计算好了的新的状态来更新更新的状态,这是完全不符合的,而倒过来循环正好就能避免这种事情的发生。(想通了的同学继续看,没想通的同学抠破脑袋想。)

所以上面的代码还可以写成这样:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,vv,v[1006],w[1006],dp[1006]; 
int main()
{cin>>n>>vv;for(int i=1;i<=n;i++){cin>>v[i]>>w[i];}for(int i=1;i<=n;i++){for(int j=vv;j>=v[i];j--){dp[j]=max(dp[j],dp[j-v[i]]+w[i]);}}cout<<dp[vv];return 0;
}

完全背包

特点:每个物体有无穷多个,可以无限取同一个物品。

这时的改动很小,只需要把上面 01 背包优化成一维时的循环改成正着循环就行了。这又是为啥呢?

我们前面不是说了吗:正着循环会把更新好的状态拿去更新当前状态。如果是 01 背包每种只能用一次,那肯定不行。但是完全背包可以多次放一个物品啊,当前的最新状态对于另一个状态来讲可能只是一个旧状态罢了。

所以,我们把上面的代码稍作改动:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,vv,v[1006],w[1006],dp[1006]; 
int main()
{cin>>n>>vv;for(int i=1;i<=n;i++){cin>>v[i]>>w[i];}for(int i=1;i<=n;i++){for(int j=v[i];j<=vv;j++){dp[j]=max(dp[j],dp[j-v[i]]+w[i]);}}cout<<dp[vv];return 0;
}

就水灵灵的 A C \color{green}{AC} AC 了!

(讲的稍微有点快,没看懂的同学可以回去再看。)

多重背包

特点:每件物品有一定数量,所装的物品数量不能超过这个值。

还是拿一道例题讲一下:

N N N 种物品和一个容量是 V V V 的背包。第 i i i 种物品最多有 s i s_i si 件,每件体积是 v i v_i vi,价值是 w i w_i wi
求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。
输出最大价值。

外面两层循环跟 01 背包一模一样,但是因为有数量限制,里面需要多加一层循环:

for(int k=0;k<=s[i]&&v[i]*k<=j;k++)

这层循环就是循环你要拿或者是不拿 k k k 个物品。

然后我们写状态转移方程:

d p i , j = max ⁡ { d p i − 1 , j , d p i − 1 , j − k × v i + k × w i } dp_{i,j}=\max\{dp_{i-1,j},dp_{i-1,j-k\times v_i}+k\times w_i\} dpi,j=max{dpi1,j,dpi1,jk×vi+k×wi}

再根据与 01 背包一样的套路优化一下即可。

代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,vv,v[106],w[106],s[106],dp[106]; 
signed main()
{cin>>n>>vv;for(int i=1;i<=n;i++){cin>>v[i]>>w[i]>>s[i];}for(int i=1;i<=n;i++){for(int j=vv;j>=v[i];j--){for(int k=0;k<=s[i]&&v[i]*k<=j;k++){dp[j]=max(dp[j],dp[j-v[i]*k]+w[i]*k);}}}cout<<dp[vv];return 0;
}

二进制优化

但是(一般一切顺利的时候搜会有个“但是”),我们稍加计算发现它的时间复杂度达到了恐怖的 O ( V × ∑ s i ) O(V\times\sum s_i) O(V×si),这个时间复杂度是极高的,为了降低时间复杂度,我们采取了一种优化:转为 01 背包问题。

因为我们有至多 s i s_i si 个,那么我们可以选择的个数有哪些呢?这时,聪明的计算机学家们就想到了一种办法:转二进制

这个转二进制有什么好处呢?好处可大了去了。因为我们知道任何一个数倍拆成二进制后是可以拼凑出再 s i s_i si 以内的所有数的,而对于当前这个数加不加上又是一个 01 背包问题。

也就是这样:假设 s i = 7 s_i=7 si=7,那么 7 7 7 写成二进制就是 111 111 111,拆成二的幂次相加就是 2 2 + 2 1 + 2 0 2^2+2^1+2^0 22+21+20,而对于每一个数选不选进来凑成一个小于 s i s_i si 的数是个 01 背包问题。于是我们就将多重背包转化成了 01 背包。而对于每一个数再乘 v i v_i vi 表示新的体积,乘 w i w_i wi 表示新的质量,然后做 01 背包就行。

这样我们就将时间复杂度降到了 O ( V × ∑ log ⁡ 2 ( s i ) ) O(V\times\sum\log_2(s_i)) O(V×log2(si)),大大优化了啊!

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
struct binary{int v,w;
};
int n,vv,v[1006],w[1006],s[1006],dp[2006]; 
vector<binary>v1;
signed main()
{cin>>n>>vv;for(int i=1;i<=n;i++){cin>>v[i]>>w[i]>>s[i];}for(int i=1;i<=n;i++){for(int j=1;j<=s[i];j*=2){s[i]-=j;v1.push_back({v[i]*j,w[i]*j});}if(s[i]>=0){v1.push_back({v[i]*s[i],w[i]*s[i]});}}for(auto i:v1){for(int j=vv;j>=i.v;j--){dp[j]=max(dp[j],dp[j-i.v]+i.w);}}cout<<dp[vv];return 0;
}

单调队列优化

注:一般情况下只会卡到二进制优化,所以单调队列优化看不懂的同学可以直接跳过。

二进制优化已经很好了,但还不是最好,真正好的直接优化到了 O ( N × V ) O(N\times V) O(N×V),让我们有请单调队列优化

~~由于本作者实在是太菜了,竟然没看懂单调队列优化,~~感兴趣的同学可以参考这篇文章。

小结

这篇文章带你梳理了三种基本背包:01 背包、完全背包与多重背包,至于更多的背包模型请大家搜索背包九讲,那里有更多的大佬在等着你们。

相关文章:

背包 DP 详解

文章目录 背包DP01 背包完全背包多重背包二进制优化单调队列优化 小结 背包DP 背包 DP&#xff0c;说白了就是往一个背包里扔东西&#xff0c;求最后的最大价值是多少&#xff0c;一般分为了三种&#xff1a;01 背包、完全背包和多重背包。而 01 背包则是一切的基础。 01 背包…...

深入剖析 HashMap:内部结构与性能优化

深入剖析 HashMap&#xff1a;内部结构与性能优化 引言 HashMap 是 Java 集合框架中的核心类&#xff0c;广泛应用于数据存储和检索场景。本文将深入剖析其内部结构&#xff0c;包括数组、链表和红黑树的转换机制&#xff0c;帮助读者理解其工作原理和性能优化策略。 1. Hash…...

数据从辅存调入主存,页表中一定存在

在虚拟内存系统中&#xff0c;​数据从辅存调入主存时&#xff0c;页表中一定存在对应的页表项&#xff0c;但页表项的「存在状态」会发生变化。以下是详细分析&#xff1a; 关键逻辑 ​页表的作用 页表是虚拟内存的核心数据结构&#xff0c;记录了虚拟地址到物理地址的映射关系…...

藏品馆管理系统

藏品馆管理系统 项目简介 这是一个基于 PHP 开发的藏品馆管理系统&#xff0c;实现了藏品管理、用户管理等功能。 藏品馆管理系统 系统架构 开发语言&#xff1a;PHP数据库&#xff1a;MySQL前端框架&#xff1a;BootstrapJavaScript 库&#xff1a;jQuery 目录结构 book/…...

力扣算法ing(60 / 100)

4.19 回溯合集—93复原ip地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&…...

时态--06--现在完成時

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 现在完成時1.语法1.肯定句2.否定句3.疑问句4.have been/gone to5.现在分词 practice 现在完成時 1.语法 1.肯定句 2.否定句 3.疑问句 4.have been/gone to 5.现在分…...

Java中常见的锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock

在Java中&#xff0c;锁是实现多线程同步的核心机制。不同的锁适用于不同的场景&#xff0c;理解其实现原理和使用方法对优化性能和避免并发问题至关重要。 一、隐式锁&#xff1a;synchronized 关键字 实现原理 基于对象监视器&#xff08;Monitor&#xff09;&#xff1a;每…...

【教程】DVWA靶场渗透

【教程】DVWA靶场渗透 备注一、环境搭建二、弱口令&#xff08;Brute Force&#xff09;三、命令注入&#xff08;Command Injection&#xff09;四、CSRF&#xff08;Cross Site Request Forgery&#xff09;五、文件包含&#xff08;File Inclusion&#xff09;六、文件上传&…...

23种设计模式-创建型模式之原型模式(Java版本)

Java 原型模式&#xff08;Prototype Pattern&#xff09;详解 &#x1f9ec; 什么是原型模式&#xff1f; 原型模式用于通过复制已有对象的方式创建新对象&#xff0c;而不是通过 new 关键字重新创建。 核心是&#xff1a;通过克隆&#xff08;clone&#xff09;已有对象&a…...

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读前言autopad函数Conv类__init__成员函数forward成员函数forward_fuse成员函数 Bottleneck类__init__成员…...

PDF转excel+json ,vue3+SpringBoot在线演示+附带源码

在线演示地址&#xff1a;Vite Vuehttp://www.xpclm.online/pdf-h5 源码gitee前后端地址&#xff1a; javapdfexcel: javaPDF转excelhttps://gitee.com/gaiya001/javapdfexcel.git 盖亚/vuepdfhttps://gitee.com/gaiya001/vuepdf.git 后续会推出 前端版本跟nestjs版本 识别复…...

LeetCode 热题 100_乘积最大子数组(88_152_中等_C++)(动态规划)

LeetCode 热题 100_乘积最大子数组&#xff08;88_152&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;暴力破解法(双重循环)&#xff09;&#xff1a;思路二&#xff08;动态规划&#xff09;&#xff1a; …...

Nvidia显卡架构演进

1 简介 显示卡&#xff08;英语&#xff1a;Display Card&#xff09;简称显卡&#xff0c;也称图形卡&#xff08;Graphics Card&#xff09;&#xff0c;是个人电脑上以图形处理器&#xff08;GPU&#xff09;为核心的扩展卡&#xff0c;用途是提供中央处理器以外的微处理器帮…...

TCP/IP、UDP、HTTP、HTTPS、WebSocket 一文讲解

在当今互联网世界中&#xff0c;数据通信是所有应用运行的基础。无论是打开网页、发送消息还是视频通话&#xff0c;背后都依赖于各种网络协议的协同工作。其中&#xff0c;TCP/IP、UDP、HTTP、HTTPS 和 WebSocket 是最为核心的几种协议。本文将围绕它们的概念、特性和适用场景…...

[密码学基础]密码学发展简史:从古典艺术到量子安全的演进

密码学发展简史&#xff1a;从古典艺术到量子安全的演进 密码学作为信息安全的基石&#xff0c;其发展贯穿人类文明史&#xff0c;从最初的文字游戏到量子时代的数学博弈&#xff0c;每一次变革都深刻影响着政治、军事、科技乃至日常生活。本文将以技术演进为主线&#xff0c;…...

包含物体obj与相机camera的 代数几何代码解释

反余弦函数的值域在 [0, pi] 斜体样式 cam_pose self._cameras[hand_realsense].camera.get_model_matrix() # cam2world# 物体到相机的向量 obj_tcp_vec cam_pose[:3, 3] - self.obj_pose.p dist np.linalg.norm(obj_tcp_vec) # 物体位姿的旋转矩阵 obj_rot_mat self.ob…...

【C++算法】65.栈_删除字符中的所有相邻重复项

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a; 题目链接&#xff1a; 1047. 删除字符串中的所有相邻重复项 题目描述&#xff1a; 解法 利用string模拟栈 元素依次进栈&#xff0c;当进栈元素和栈顶元素一样的时候&#xff0c;就弹出栈顶字符…...

【java实现+4种变体完整例子】排序算法中【插入排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是插入排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、插入排序基础实现 原理 将元素逐个插入到已排序序列的合适位置&#xff0c;逐步构建有序序列。 代码示例 public class InsertionSort {void…...

神经网络的数学之旅:从输入到反向传播

目录 神经网络简介神经元激活函数神经网络 神经网络的工作过程前向传播&#xff08;forward&#xff09;反向传播&#xff08;backward&#xff09;训练神经网络 神经网络简介 神经元 在深度学习中&#xff0c;必须要说的就是神经⽹络&#xff0c;或者说是⼈⼯神经⽹络&#…...

软件测试的页面交互标准:怎样有效提高易用性

当用户遇到"反人类"设计时 "这个按钮怎么点不了&#xff1f;"、"错误提示完全看不懂"、"我输入的内容去哪了&#xff1f;"——这些用户抱怨背后&#xff0c;都指向同一个问题&#xff1a;页面交互的易用性缺陷。作为软件测试工程师&a…...

Linux419 三次握手四次挥手抓包 wireshark

还是Notfound 没连接 可能我在/home 准备配置静态IP vim ctrlr 撤销 u撤销 配置成功 准备关闭防火墙 准备配置 YUM源 df -h 未看到sr0文件 准备排查 准备挂载 还是没连接 计划重启 有了 不重启了 挂载准备 修改配置文件准备 准备清理缓存 ok 重新修改配…...

玩转Docker | 使用Docker部署tududi任务管理工具

玩转Docker | 使用Docker部署tududi任务管理工具 前言一、tududi介绍Tududi简介核心功能特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署tududi服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问tududi服务访问tududi首页登录tu…...

ueditorplus编辑器已增加AI智能

之前功能请参考:https://www.geh3408.top/blog/76 下载:https://gitee.com/mo3408/ueditorplus 注意:key值需要单独获取,默认为DeepSeek,默认key有限制,请更换为自己的。 演示地址:https://www.geh3408.top/ueditorplus/dist 更多体验:ueditorplus编辑器已增加AI智…...

深度学习数据预处理:Dataset类的全面解析与实战指南

前言 在深度学习项目中&#xff0c;数据预处理是模型训练前至关重要的一环。一个高效、灵活的数据预处理流程不仅能提升模型性能&#xff0c;还能大大加快开发效率。本文将深入探讨PyTorch中的Dataset类&#xff0c;介绍数据预处理的常见技巧&#xff0c;并通过实战示例展示如何…...

【机器学习-周总结】-第4周

以下是本周学习内容的整理总结&#xff0c;从技术学习、实战应用到科研辅助技能三个方面归纳&#xff1a; 文章目录 &#x1f4d8; 一、技术学习模块&#xff1a;TCN 基础知识与结构理解&#x1f539; 博客1&#xff1a;【时序预测05】– TCN&#xff08;Temporal Convolutiona…...

高可靠 ZIP 压缩方案兼容 Office、PDF、TXT 和图片的二阶段回退机制

一、引言 在企业级应用中&#xff0c;经常需要将多种类型的文件&#xff08;如 Office 文档、PDF、纯文本、图片等&#xff09;打包成 ZIP 并提供给用户下载。但由于文件路径过长、特殊字符或权限等问题&#xff0c;Go 标准库的 archive/zip 有时会出现“压缩成功却实际未写入…...

【HDFS入门】HDFS数据冗余与容错机制解析:如何保障大数据高可靠存储?

目录 1 HDFS冗余机制设计哲学 1.1 多副本存储策略的工程权衡 1.2 机架感知的智能拓扑算法 2 容错机制实现原理 2.1 故障检测的三重保障 2.2 数据恢复的智能调度 3 关键场景容错分析 3.1 数据中心级故障应对 3.2 数据损坏的校验机制 4 进阶优化方案 4.1 纠删码技术实…...

06-libVLC的视频播放器:推流RTMP

创建媒体对象 libvlc_media_t* m = libvlc_media_new_path(m_pInstance, inputPath.toStdString().c_str()); if (!m) return -1; // 创建失败返回错误 libvlc_media_new_path:根据文件路径创建媒体对象。注意:toStdString().c_str() 在Qt中可能存在临时字符串析构问题,建议…...

【DT】USB通讯失败记录

项目场景&#xff1a; DT小板 USB通讯失败 问题描述 V1.1 板子含有降压电路、电容充电电路、姿态传感电路&#xff0c;语音电路、电弧电路、TF卡电路 焊接完成&#xff1a;功能正常 V1.2 为方便数传模块拔插&#xff0c;把座子缩小并做在了背面&#xff0c;下载口反向方便狭…...

【笔记】网路安全管理-实操

一、系统安全防护-Windows 开始-》管理工具-》本地安全策略-》账户策略-》密码策略-》 1.密码必须符合复杂性要求。双击打开-》勾选已启用-》单击:应用-》单击:确定 2.密码长度最小值。双击打开-》设置密码长度最小值为:?个字符 3.密码最短使用期限。双击打开-》设置密码…...

FFMPEG-视频解码-支持rtsp|rtmp|音视频文件(低延迟)

本人亲测解码显示对比延迟达到7到20毫秒之间浮动兼容播放音视频文件、拉流RTSP、RTMP等网络流 基于 Qt 和 FFmpeg 的视频解码播放器类,继承自 QThread,实现了视频流的解码、播放控制、帧同步和错误恢复等功能 工作流程初始化阶段: 用户设置URL和显示尺寸 调用play()启动线程解…...

LDR、MOV和STR指令详解

文章目录 前言 一、LDR指令详解 1.基本语法 2.寻址方式 3.伪指令形式 二、MOV指令详解 1.基本语法 2.常见用法 3.特殊变体 三、STR指令详解 1.基本语法 2.寻址方式 四、三者区别与联系 1.基本语法 2.操作效率 3.大数值处理 总结 前言 ARM汇编中的LDR、MOV和STR是三个最基础也最…...

MATLAB 控制系统设计与仿真 - 41

鲁棒控制的其他函数 - 回路成型函数 loopsyn 灵敏度问题由鲁棒控制工具箱中的loopsyn就可以直接求解&#xff0c;该函数采用H无穷回路成型算法设计控制器&#xff0c;函数的调用格式为&#xff1a; [K,CL,gamma,info] loopsyn(G,Gd) % G为受控对象模型% Gd为期望的回路传递函…...

Scade 语言词法介绍

Scade 6 是一种具备形式化语法与形式化语义的领域特定语言&#xff08;注1&#xff09;。自2008年发布&#xff08;注5&#xff09;起&#xff0c;在 Scade Suite 产品系列中语言定义方面到目前未产生重要的改变(注2)。在下面的内容中将介绍Scade 语言的词法(注3)。 注1&#x…...

Replicate Python client

本文翻译整理自&#xff1a;https://github.com/replicate/replicate-python 文章目录 一、关于 Replicate Python 客户端相关链接资源关键功能特性 二、1.0.0 版本的重大变更三、安装与配置1、系统要求2、安装3、认证配置 四、核心功能1、运行模型2、异步IO支持3、流式输出模型…...

LLM做逻辑推理题 - 如何找出不标准的球?

题目: 有80个外观一致的小球&#xff0c;其中一个和其它的重量不同&#xff0c;&#xff08;不知道更轻还是更重&#xff09;。现在给你一个天平&#xff0c;允许你称四次&#xff0c;把重量不同的球找出来&#xff0c;怎么称&#xff1f; 1. 答案 第1次称量&#xff1a;天平…...

[密码学基础]国密算法深度解析:中国密码标准的自主化之路

国密算法深度解析&#xff1a;中国密码标准的自主化之路 国密算法&#xff08;SM系列算法&#xff09;是中国自主研发的密码技术标准体系&#xff0c;旨在打破国际密码技术垄断&#xff0c;保障国家信息安全。本文将从技术原理、应用场景和生态发展三个维度&#xff0c;全面解…...

【计算机视觉】三维视觉项目 - Colmap二维图像重建三维场景

COLMAP 3D重建 项目概述项目功能项目运行方式1. 环境准备2. 编译 COLMAP3. 数据准备4. 运行 COLMAP 常见问题及解决方法1. **编译问题**2. **运行问题**3. **数据问题** 项目实战建议项目参考文献 项目概述 COLMAP 是一个开源的三维重建软件&#xff0c;专注于 Structure-from…...

基于Fabric.js的选座布局系统开发笔记

项目概述 最近开发了一个简单的选座布局系统&#xff0c;主要用于会议、活动或餐厅等场景的座位和桌子布局设计。系统基于HTML5 Canvas和Fabric.js库实现&#xff0c;支持添加座位、桌子&#xff0c;并能保存布局数据。 技术栈 • HTML5 Canvas&#xff1a;作为绘图的基础 •…...

PHP怎样连接MySQL数据库?

方法一&#xff1a;使用 mysqli 扩展 mysqli 是 MySQL 的改进版扩展&#xff0c;提供了面向对象和过程化的接口。 面向对象风格 <?php$servername "localhost"; $username "your_username"; $password "your_password"; $dbname &quo…...

将飞帆制作的网页作为 Vue 2 组件引入到自己网页中使用

飞帆平台有一个功能&#xff1a;不仅所有的网页都是通过控件搭建而成&#xff0c;而且生成的网页又是一个大控件&#xff0c;可以导入到你自己的网页使用。 这篇文章&#xff0c;我们要讲的就是如何将飞帆生成的网页作为控件&#xff08;组件&#xff09;导入到自己的网页中。…...

Python制作简易PDF查看工具PDFViewerV1.0显示优化

原文说明 为不破坏原文结构,因此功能优化不在原文中维护了。关于这款工具原文请通过下面链接访问。Python制作简易PDF查看工具PDFViewerV1.0 这款小工具基本功能已经可以作为一款文档浏览器使用,但还有一些美中不足的地方,本文将介绍对文本查找功能的优化调整。 优化效果 …...

YOLOv11改进有效涨点专栏:从理论到实战的深度优化指南

## YOLOv11的进化之路 在目标检测领域,YOLO系列算法始终保持着革命性的创新步伐。YOLOv11作为该系列的最新演进版本,在保持实时检测优势的同时,通过架构层面的深度优化实现了精度与速度的平衡。本文将从**七大核心模块**出发,系统性地解析针对YOLOv11的有效改进方案,涵盖从…...

【EDA软件】【设计约束和分析操作方法】

1. 设计约束 设计约束主要分为物理约束和时序约束。 物理约束主要包括I/O接口约束&#xff08;如引脚分配、电平标准设定等物理属性的约束&#xff09;、布局约束、布线约束以及配置约束。 时序约束是FPGA内部的各种逻辑或走线的延时&#xff0c;反应系统的频率和速度的约束…...

JVM基础认知:JVM到底是什么?为什么它如此重要?

随着 Java 语言在企业级应用、互联网服务、嵌入式系统等领域的广泛采用&#xff0c;JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;成为了支撑整个生态的核心基础。初学者往往会把注意力集中在 Java 代码本身&#xff0c;却忽视了背后那台“看不见的机…...

javassist

使用javassist获取参数名 1&#xff0c;添加依赖 需要在pom.xml文件中添加下面的依赖&#xff1a; <dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.28.0-GA</version> </depende…...

【C++算法】66.栈_比较含退格的字符串

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a; 题目链接&#xff1a; 844. 比较含退格的字符串 题目描述&#xff1a; 解法 用字符串来模拟栈。 C 算法代码&#xff1a; class Solution { public:bool backspaceCompare(string s, string t…...

游戏引擎学习第235天:在 Windows 上初始化 OpenGL

奇怪有问题 之前没注意到 这个问题是Count 0 GlobalConstants_Renderer_UsedDebugCamer 打开的话会有Bug Count是零的话就不让排序了 game.h: 查阅 TODO 列表 大家好&#xff0c;欢迎来到 game Hero&#xff0c;这是一档我们在直播中一起编写完整游戏的节目。不幸的是&a…...

FPGA系列之DDS信号发生器设计(DE2-115开发板)

一、IP核 IP(Intellectual Property)原指知识产权、著作权等&#xff0c;在IC设计领域通常被理解为实现某种功能的设计。IP模块则是完成某种比较复杂算法或功能&#xff08;如FIR滤波器、FFT、SDRAM控制器、PCIe接口、CPU核等&#xff09;并且参数可修改的电路模块&#xff0c…...

修改Theme SHELL美化panel

安装 使用 使用Tweaks进行设置 需要创建.themes文件夹&#xff0c;在当前目录下 mkdir ~/.themes从官网下载文件 https://www.gnome-look.org/p/1013030 将打包压缩文件移动到~/themes&#xff0c;并解压 tar -xvf 01-Flat-Remix-Light-20250413.tar.xz然后使用 按 Alt F2…...