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

动态规划学习——背包问题

一,开心的金明

题目链接:P1060 [NOIP 2006 普及组] 开心的金明 - 洛谷

 本题是一道经典的01背包问题,状态表示和状态定义可以仿照01背包的来。

01背包传送门:【背包问题 】01背包_01背包算法题链接-CSDN博客

dp[i][j]表示从前i个物品中选,总价值不超过n,并且使得每件物品的价格与重要度的乘积的总和最大。

【代码】

#include <iostream>
#include <cstring>
using namespace std;const int N = 3e4 + 4;
//背包dp
//总钱数,物品个数
int n, m;
int v[30];//每个物品的价格
int p[30];//每个物品的重要度
int dp[30][N];//前i个物品中选,总价值不超过j,使得每件物品的价格与重要度的乘积总和最大
int main()
{cin >> n >> m;for (int i = 1; i <= m; i++)cin >> v[i] >> p[i];for(int i=1;i<=m;i++)for (int j = 1; j <= n; j++){dp[i][j] = dp[i - 1][j];if (j >= v[i])dp[i][j] = max(dp[i][j], dp[i - 1][j-v[i]] + v[i] * p[i]);}cout << dp[m][n] << endl;return 0;
}

二,金明的预算方案

题目链接:P1064 [NOIP 2006 提高组] 金明的预算方案 - 洛谷

本题在上题的基础上,增加了一个限制,选择一个物品,这个物品可能是某个物品的附属品,在选该物品时,必须先买主件。且每个主件最多包含两个附件。

对于每个物品,分为主件和附件两类。且每个主件最多包含两个附件。所以,对于每个物品,会有5种状态

  • 什么都不买
  • 只买主件
  • 可以买一个主件和第一个附件
  • 可以买一个主件和第二个附件
  • 可以买一个主件,第一个附件和第二个附件

然后继续按照背包问题的思路求最大值即可。

思考问题的时候,从主件的位置思考,考虑是否能够买它的附件。题目中说是购买附件时,必须先购买主件,容易让我们从附件的位置考虑问题。


数据处理:

v[i][j]:表示第i个物品的第j个附件的价格

p[i][j]:表示第i个物品的第i个附件的重要度

如果j=0,代表该物品就是主件。

初始化:

int _v,_p,_q;//价格,重要度,附件

如果该物品是主件,也就是p=0,v[i][0]=_v,p[i][0]=_q;

如果该物品是附件,也就是p!=0,那么该物品可能是某个物品的第一个附件,也可能是第二个附件。需要判断:

  • 如果v[_q][1]==0,说明主件的第一个附件为空,那么该物品是第一个主件,v[_q][1]=_v,p[_q][2]=_p。
  • 如果第一个附件有物品,那么该物品就是第二个附件,v[_q][2]=_v,p[_q][2]=_p。

状态表示:

dp[i][j]:表示从前i个元素中选,总价格不超过j,并且使每件物品的价格和重要度的乘积的总和最大。

状态转移方程的推导:

 【代码】

//金明的预算方案-洛谷100
#include <iostream>
#include <algorithm>
using namespace std;const int MaxN = 32000;
//价格和重要度
//第i个物品的第j个附件的价格和重要度
int v[65][3], p[65][3];
int dp[65][MaxN];
//金钱数,物品个数
int n, m;int main()
{cin >> n >> m;for (int i = 1; i <= m; i++){int _v, _p,_q;cin >> _v >> _p >> _q;if (_q == 0)//该物品是主件{v[i][0] = _v;p[i][0] = _p;}else  //该物品是附件,判断是哪一个物品的第几个附件{if (v[_q][1] == 0) //是第一个主件{v[_q][1] = _v;p[_q][1] = _p;}else//是第二个附件{v[_q][2] = _v;p[_q][2] = _p;}}}for(int i=1;i<=m;i++)for (int j = 0; j <= n; j++){dp[i][j] = dp[i - 1][j];//够买主件if (j >= v[i][0])dp[i][j] = max(dp[i][j],dp[i - 1][j - v[i][0]] + v[i][0] * p[i][0]);//购买主件和第一个附件if (j >= v[i][0] + v[i][1])dp[i][j] = max(dp[i][j],dp[i - 1][j - v[i][0] - v[i][1]] + v[i][0] * p[i][0] + v[i][1] * p[i][1]);//购买主键和第二个附件if (j >= v[i][0] + v[i][2])dp[i][j] = max(dp[i][j],dp[i - 1][j - v[i][0] - v[i][2]] + v[i][0] * p[i][0] + v[i][2] * p[i][2]);//购买主件,第一个附件和第二个附件if (j >= v[i][0] + v[i][1] + v[i][2])dp[i][j] = max(dp[i][j],dp[i - 1][j - v[i][0] - v[i][1] - v[i][2] ]+v[i][0] * p[i][0] + v[i][1] * p[i][1] + v[i][2] * p[i][2]);}cout << dp[m][n] << endl;return 0;
}

可以发现,上面的代码dp表达式太长,而且大多数求解的过程都类似。

所以可以通过定义一个函数来解决。同时可以利用滚动数组进行空间优化:

滚动数组传送门: 【背包问题 】01背包_牛客背包问题-CSDN博客

优化后的代码:

 

//简化dp代码部分
//空间优化:使用滚动数组优化
#include <iostream>
#include <algorithm>
using namespace std;const int MaxN = 32000;
//价格和重要度
//第i个物品的第j个附件的价格和重要度
int v[65][3], p[65][3];
int dp[MaxN];
//金钱数,物品个数
int n, m;int main()
{cin >> n >> m;for (int i = 1; i <= m; i++){int _v, _p, _q;cin >> _v >> _p >> _q;if (_q == 0)//该物品是主件{v[i][0] = _v;p[i][0] = _p;}else  //该物品是附件,判断是哪一个物品的第几个附件{if (v[_q][1] == 0) //是第一个主件{v[_q][1] = _v;p[_q][1] = _p;}else//是第二个附件{v[_q][2] = _v;p[_q][2] = _p;}}}for (int i = 1; i <= m; i++)for (int j = n; j >=0; j--){auto cost2 = [i](int x, int y) {return v[i][x] + v[i][y]; };auto cost3 = [i](int x, int y,int z) {return v[i][x] + v[i][y]+v[i][z]; };auto rpp = [i](int x) {return v[i][x] * p[i][x]; };//够买主件if (j >= v[i][0])dp[j] = max(dp[j],dp[j - v[i][0]] + rpp(0));//购买主件和第一个附件if (j >= cost2(0,1))dp[j] = max(dp[j],dp[j - cost2(0,1)] + rpp(0) + rpp(1));//购买主键和第二个附件if (j >= cost2(0,2))dp[i] = max(dp[j],dp[j - cost2(0,2)] + rpp(0) + rpp(2));//购买主件,第一个附件和第二个附件if (j >= cost3(0,1,2))dp[j] = max(dp[j],dp[j - cost3(0,1,2)] +rpp(0) + rpp(1) + rpp(2));}cout << dp[n] << endl;return 0;
}

 三,mari和shiny

题目链接:mari和shiny

本题要求,求出一个字符串的所有子序列中,有多少个是shy???

【动态规划】

首先定义状态表示:(大思路还是以某个位置为结尾,分析状态)

s[i]:表示下标 0-i的子串中 ,包含多少个子序列"s"。

h[i]:表示下标0-i的子串中,包含多少个子序列"sh"。

y[i]:表示下标0-i的子串中,包含多少个子序列"shy"。

状态转移方程的推导:

s[i]:对于第i个位置,有两种状态。

          1,如果s[i]==‘s',那么0-i子串中子序列's'的个数,就是0-i-1子串中子序列 s的个数,再加1,即s[i-1]+1。

 2,如果s[i]!='s',那么0-i子串中子序列’s'的个数,就是0-i-1子串中子序列s的个数,即s[i-1]。

h[i]:对于第i个位置,有两种状态。

          1,如果h[i]==‘h',那么0-i子串中子序列'sh'的个数,就是0-i-1子串中子序列 sh的个数h[i-1],再加上0-i-1子串中s的个数s[i-1],因为s和h可以组合成sh,即s[i-1]+h[i-1]。

 2,如果s[i]!='h',那么0-i子串中子序列’sh'的个数,就是0-i-1子串中子序列sh的个数,即h[i-1]。

y[i]:对于第i个位置,有两种状态。

          1,如果y[i]==‘y',那么0-i子串中子序列'shy'的个数,就是0-i-1子串中 子序列shy的个数y[i-1],再加0-i-1子串中子序列sh的个数h[i-1],即h[i-1]+y[i-1]。

 2,如果y[i]!='y',那么0-i子串中子序列’shy'的个数,就是0-i-1子串中shy的个数,即h[i-1]。

 【代码】

#include <iostream>
#include <string>
using namespace std;
const int N=3e5+10;long long s[N],h[N],y[N];
int n=0;
int main()
{cin>>n;string str;cin>>str;s[0]=str[0]=='s'?1:0;h[0]=y[0]=0;for(int i=1;i<n;i++){s[i]=str[i]=='s'?s[i-1]+1:s[i-1];h[i]=str[i]=='h'?s[i-1]+h[i-1]:h[i-1];y[i]=str[i]=='y'?h[i-1]+y[i-1]:y[i-1];}cout<<y[n-1]<<endl;return 0;
}

空间优化版本:

每次填表的时候,都只会用到上一个值。即求s[i],只会与s[i-1]有关。所以可以使用3个变量来代替三个dp表。

#include <iostream>
#include <string>
using namespace std;
const int N=3e5+10;long long s,h,y;
int n=0;
int main()
{cin>>n;string str;cin>>str;s=str[0]=='s'?1:0;h=y=0;for(int i=1;i<n;i++){if(str[i]=='s')s++;if(str[i]=='h')h+=s;if(str[i]=='y')y+=h;}cout<<y<<endl;return 0;
}

相关文章:

动态规划学习——背包问题

一&#xff0c;开心的金明 题目链接&#xff1a;P1060 [NOIP 2006 普及组] 开心的金明 - 洛谷 本题是一道经典的01背包问题&#xff0c;状态表示和状态定义可以仿照01背包的来。 01背包传送门&#xff1a;【背包问题 】01背包_01背包算法题链接-CSDN博客 dp[i][j]表示从前i个物…...

oracle数据泵操作

源库操作 查询目录对象是否已定义 plsql执行 select * from dba_directories t where t.directory_name MYDIR;先创建一个d盘databack文件夹上边语句查询,无返回数据&#xff0c;则创建&#xff0c;若提示权限不足&#xff0c;请授权 plsql执行 create directory mydir as …...

flutter框架中文文档,android智能手机编程答案

RecyclerView优化全攻略&#xff1a;从数据处理到性能提升 字节跳动四面有三面都问了这个问题&#xff0c;在此做了整理&#xff0c;希望可以帮助到大家&#xff0c;欢迎查漏补缺。 数据处理和视图加载分离 我们知道&#xff0c;从远端拉取数据肯定是要放在异步的&#xff0…...

Sourcetree安装教程及配合Gitee的使用

零、SourceTree介绍 SourceTree 是一款由 Atlassian 公司开发的免费图形化版本控制工具&#xff0c;支持 Git 和 Mercurial 两大版本控制系统。它通过直观的界面简化了代码管理操作&#xff0c;适合开发者和团队高效管理项目代码。 核心功能 可视化操作 无需记忆命令行&#x…...

.net farmework 4.8 类库中添加 wpf 窗体

一般正常情况下&#xff0c;在 .net farmework 4.8 类库中是无法添加 wpf 窗体的&#xff0c;如下图 但是可以添加 winform 窗体&#xff0c;如果想添加 wpf 窗体&#xff0c;需要一些更改 1.添加库 在程序集这里添加库&#xff0c;直接搜索名字即可 需要添加下面库&#xff1…...

某合约任意提取BNB漏洞

1背景描述 合约是一个在满足特定条件时在区块链上执行代码的程序&#xff0c;各方以数字签署合同的方式准许并维护它的其运行。这些代码可以是向朋友汇款、买卖 NFT 虚拟商品等一系列复杂的内容。 存在漏洞的目标合约是一个结合Meme文化病毒式传播与去中心化金融&#xff08;D…...

Python+新版DeepSeek V3轻松开发Agent

1 简介 前几天新版DeepSeek V3模型&#xff08;代号250324&#xff09;更新发布。作为支持函数调用的先进开源大模型&#xff0c;我们可以基于它进行高效的Agent功能开发&#xff0c;这也是当下非常火热&#x1f525;的AI应用领域。 今天的文章中&#xff0c;我就将带大家以P…...

Linux内核网络栈:数据发送流程解析

引言 在Linux内核网络栈中,数据的发送过程涉及到多个层次的协作,从应用层的系统调用,到传输层协议的实现,再到网络层和链路层的处理,最终通过网络设备将数据包发送出去。这一过程需要多个关键结构体和回调函数的参与,包括struct proto、struct proto_ops和struct net_de…...

[leetcode]2492. 两个城市间路径的最小分数(并查集 排序后建边)

题目链接 题意 给定一个 n n n个点 m m m条边的无向图 每条边有边权 求1-n的路径中最小的边权是多少 每条路可以重复走 思路 把边按边权降序排序 用并查集维护连通性 遍历每条边 每次合并边的起点和终点 如果1和n联通 并且这条边在1和n的这个连通块中 就对ans取min Code…...

git 常用操作整理

一.git 的概念 Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改历史&#xff0c;帮助开发者管理代码的版本。以下是关于 Git 的一些基本概念&#xff1a; 1. 仓库&#xff08;Repository&#xff09; - **本地仓库**&#xff1a;在你的计算机上存储的项目文件及…...

AWS API Gateway Canary部署实战:Lambda到ECS的平滑迁移指南

在云原生架构中,如何实现服务平滑迁移是一个常见挑战。本文将详细介绍如何利用AWS API Gateway的Canary部署功能,实现从Lambda函数到ECS服务的无缝迁移,同时保证客户端无感知并提供便捷的回退机制。 一、迁移方案概述 在本方案中,我们将实现以下目标: 将现有Lambda服务平…...

MyBatisPlus不等于如何使用

在 MyBatis Plus 中&#xff0c;ne 方法用于构建不等于条件的 SQL 查询。以下是 ne 方法的详细用法&#xff1a; 基本用法 ne 方法可以用于 QueryWrapper 或 LambdaQueryWrapper 中&#xff0c;用于指定某个字段的值不等于指定的值。它对应于 SQL 中的 ! 或 <> 操作符。 …...

Java面试黄金宝典25

1. 对 100 万个玩家的积分中前 100 名积分进行实时更新 定义 该问题旨在实时追踪并展示 100 万个玩家中积分排名前 100 的玩家信息。随着玩家通过完成任务或获取金钱改变积分&#xff0c;系统需要迅速更新排名并展示最新的前 100 名。 要点 运用 Java 的 PriorityQueue 构建…...

洛谷题单1-P5708 【深基2.习2】三角形面积-python-流程图重构

题目描述 一个三角形的三边长分别是 a a a、 b b b、 c c c&#xff0c;那么它的面积为 p ( p − a ) ( p − b ) ( p − c ) \sqrt{p(p-a)(p-b)(p-c)} p(p−a)(p−b)(p−c) ​&#xff0c;其中 p 1 2 ( a b c ) p\frac{1}{2}(abc) p21​(abc)。输入这三个数字&#xff…...

深入理解指针5

sizeof和strlen的对比 sizeof的功能 **sizeof是**** 操作符****&#xff0c;用来**** 计算****变量或类型或数组所占**** 内存空间大小****&#xff0c;**** 单位是字节&#xff0c;****他不管内存里是什么数据** int main() {printf("%zd\n", sizeof(char));p…...

常见集合篇(一):算法复杂度分析,从理论到业务场景的深度解析

常见集合篇&#xff1a;算法复杂度分析&#xff0c;从理论到业务场景的深度解析 常见集合篇&#xff08;一)&#xff1a;算法复杂度分析&#xff0c;从理论到业务场景的深度解析一、为什么要进行复杂度分析&#xff08;一&#xff09;事后统计法的局限性&#xff08;二&#xf…...

SpringCould微服务架构之Docker(9)

Docker的基本操作之数据卷 容器跟数据耦合的问题&#xff1a; 1、不便于修改&#xff1a;当我们要修改Nginx的html内容时&#xff0c;需要进入容器内部修改&#xff0c;很不方便。 2、数据不可复用&#xff1a;在容器内部 的修改对外是不可见的&#xff0c;所有的修改对新创…...

探索 Gaggol:理解 10^^^100 的宇宙级常数

一、常数概述&#xff1a; Gaggol 是一个极其巨大的数学常数&#xff0c;其数值表示为 10^^^100。这个常数是通过对数字 10 进行超递归幂运算得到的结果。 二、Gaggol 的定义&#xff1a; Gaggol 被定义为 10 的超多层超递归幂&#xff0c;即 10 被连续地提升到自身幂的层次达…...

【C++】STL库_stack_queue 的模拟实现

栈&#xff08;Stack&#xff09;、队列&#xff08;Queue&#xff09;是C STL中的经典容器适配器 容器适配器特性 不是独立容器&#xff0c;依赖底层容器&#xff08;deque/vector/list&#xff09;通过限制基础容器接口实现特定访问模式不支持迭代器操作&#xff08;无法遍历…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例13,TableView16_13 键盘辅助拖拽示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例13,TableView16_13 键…...

Python的概论

免责声明 如有异议请在评论区友好交流&#xff0c;或者私信 内容纯属个人见解&#xff0c;仅供学习参考 如若从事非法行业请勿食用 如有雷同纯属巧合 版权问题请直接联系本人进行删改 前言 提示&#xff1a;&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c…...

AI 数字人短视频数字人口播源码:短视频内容生产的新引擎​

在当下信息爆炸的时代&#xff0c;短视频已成为主流的信息传播与娱乐方式之一。在如此庞大的市场需求下&#xff0c;如何高效、创新地生产短视频内容成为了行业关注的焦点。AI 数字人短视频数字人口播源码应运而生&#xff0c;为短视频内容生产带来了全新的变革。​ 一、行业背…...

数字人训练数据修正解释

数字人训练数据修正和查看 不需要GPU也能运行的DH_live-案例 : I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To t…...

VRRP虚拟路由器冗余协议

一、VRRP介绍 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;虚拟路由器冗余协议&#xff09;是一种用于提高网络可靠性的协议&#xff0c;旨在通过冗余机制解决默认网关单点故障问题。 核心思想&#xff1a;将多个物理路由器虚拟成一个逻辑路由器&#xf…...

微前端 - 以无界为例

一、微前端核心概念 微前端是一种将单体前端应用拆分为多个独立子应用的架构模式&#xff0c;每个子应用可独立开发、部署和运行&#xff0c;具备以下特点&#xff1a; 技术栈无关性&#xff1a;允许主应用和子应用使用不同框架&#xff08;如 React Vue&#xff09;。独立部…...

Python与图像处理

目录 一、认识图像 1、图像的构成 2、图像模式 二、处理图像 1、图像缩放 2、图像的旋转和翻转 3、滤镜效果 4、图片剪裁 5、图片素描 6、图片加水印 在众多的Python的第三方的库中&#xff0c;Pillow库是一个强大且方便的库&#xff0c;它能够处理图像&#xff0c;比…...

Lua语言脚本环境配置

参考地址&#xff1a;Lua 教程 | 菜鸟教程 Windows等直接下载安装地址&#xff1a;Lua Binaries 上面也是会跳转下载&#xff1a;https://sourceforge.net/projects/luabinaries/ 下载解压后在“环境变量”中添加路径&#xff0c;添加后如果cmd中还是无法使用lua命令&#x…...

JavaScript的异步编程

目录 目标 实战 回调函数 (Callback) Promise 目标 了解异步编程实现方式。 实战 回调函数 (Callback) 当某个任务完成后&#xff0c;调用回调函数来处理结果。它通常会导致回调地狱&#xff0c;即嵌套多个回调函数&#xff0c;官方不推荐使用。 function fetchData(call…...

Ubuntu里安装Jenkins

【方式1】&#xff1a;下载war包&#xff0c;直接运行&#xff0c;需提前搭建Java环境&#xff0c;要求11或17&#xff0c;不推荐&#xff0c;war包下载地址&#xff0c;将war包上传到服务器&#xff0c;直接使用命令启动 java -jar /data/jenkins/jenkins.war【方式2】&#…...

qt介绍tcp通信

服务器端代码 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);setWindowTitle("服务器");ui->port->setText("…...

elementui的默认样式修改

今天用element ui &#xff0c;做了个消息提示&#xff0c;发现提示的位置总是在上面&#xff0c;如图&#xff1a; 可是我想让提示的位置到下面来&#xff0c;该怎么办&#xff1f; 最后还是看了官方的api 原来有个自定义样式属性 customClass 设置下就好了 js代码 css代码 效…...

【Windows】win10系统安装.NET Framework 3.5(包括.NET 2.0和3.0)失败 错误代码:0×80240438

一、.NET3.5(包括.NET 2.0和3.0)安装方式 1.1 联网安装(需要联网,能访问微软,简单,很可能会失败) 1.2 离线安装-救急用(需要操作系统iso镜像文件,复杂,成功几率大) 二、联网安装 通过【控制面板】→【程序】→【程序和功能】→【启用或关闭Windows功能】 下载过程…...

leetcode 53.Maximum Subarray

分治法 //lSum表示[left,right]内以left为左端点的最大子段和 //rSum表示[left,right]内以right为右端点的最大字段和 //iSum表示[left,right]的区间和 int divide_conquer(int* nums,int left,int right,int *lSum,int *rSum,int *iSum){int maxSum;//表示[left,right]内的最…...

手机零售行业的 AI 破局与创新降本实践 | OceanBase DB大咖说

OceanBase《DB 大咖说》第 20 期&#xff0c;我们邀请了九机与九讯云的技术总负责人&#xff0c;李远军&#xff0c;为我们分享手机零售企业如何借力分布式数据库OceanBase&#xff0c;赋能 AI 场景&#xff0c;并通过简化架构实现成本管控上的突破与创新。 李远军于2016年加入…...

基于MCU实现的电机转速精确控制方案:软件设计与实现

本文将详细介绍一篇基于微控制器&#xff08;MCU&#xff09;的电机转速精确控制的软件方案。通过采样PWM信号控制和ADC采样技术&#xff0c;结合PID闭环控制算法&#xff0c;实现了电机转速的高效、稳定调节。以下是软件方案流程图&#xff0c;下文将对其进行展开讲解。 原图太…...

【力扣hot100题】(026)合并两个有序链表

可以创建一个新链表记录答案&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *…...

从代码学习深度学习 - 使用块的网络(VGG)PyTorch版

文章目录 前言一、VGG网络简介1.1 VGG的核心特点1.2 VGG的典型结构1.3 优点与局限性1.4 本文的实现目标二、搭建VGG网络2.1 数据准备2.2 定义VGG块2.3 构建VGG网络2.4 辅助工具2.4.1 计时器和累加器2.4.2 准确率计算2.4.3 可视化工具2.5 训练模型2.6 运行实验总结前言 深度学习…...

程序化广告行业(46/89):竞价结算规则、底价策略与内部排名解析

程序化广告行业&#xff08;46/89&#xff09;&#xff1a;竞价结算规则、底价策略与内部排名解析 大家好&#xff01;在之前的几篇博客中&#xff0c;我们已经深入探讨了程序化广告的多个重要方面&#xff0c;从基础概念到实际操作流程。我写这些博客的目的&#xff0c;就是希…...

C/C++ 基础 - 回调函数

目录 前言 回调函数预备知识 函数指针 什么是函数指针 函数指针的语法 如何用函数指针调用函数 函数指针作为函数的参数 函数指针作为函数返回类型 函数指针数组 回调函数 什么是回调函数 为什么要用回调函数 怎么使用回调函数 总结 前言 在写项目的时候&#x…...

【Node.js入门笔记12---npm包】

Node.js入门笔记12 Node.js---npm包一、什么是npm包&#xff1f;二、npm 基础使用三、包管理配置文件&#xff08;package.json&#xff09;四、提升下载速度 五、包的分类 Node.js—npm包 一、什么是npm包&#xff1f; 定义 npm&#xff08;全称 Node Package Manager&#x…...

黑盒测试的正交实验法

背景: 利用因果图法、判定表法可以帮助我们对于输入数据的组合情况进行用例设计&#xff0c;但当输入数据的组合数量巨大时&#xff0c;由于不太可能覆盖到每个输入组合的测试情况&#xff0c;因果图法或判定表法可能就不太适用了&#xff0c;可以采用正交实验法、来合理地减少…...

链表算法的技巧和方法

常用技巧&#xff1a; 1、画图 2、引入虚拟的头节点 3、不要害怕浪费空间&#xff0c;要勇于定义变量&#xff0c;eg:当链表的插入和删除的时候&#xff0c;为了便于结构体指针的连续性&#xff0c;就需要定义一个新的结构体指针&#xff0c;能更加方便&#xff1b; 4、使用快慢…...

Upload-labs 靶场搭建 及一句话木马的原理与运用

1、phpstudy及upload-labs下载 &#xff08;1&#xff09;下载phpstudy小皮面板 首先需要软件phpstudy 下载地址 phpStudy下载-phpStudy最新版下载V8.1.1.3 -阔思亮 &#xff08;2&#xff09;然后到github网址下载源码压缩包 网址 https://github.com/c0ny1/upload-labs 再…...

基于PX4和Ardupilot固件下自定义MAVLink消息测试(QGroundControl和Mission Planner)

在无人机行业&#xff0c;MAVLink&#xff08;Micro Air Vehicle Link&#xff09;协议已经成为了通信的标准协议。MAVLink协议定义了一种轻量级的消息传输格式&#xff0c;广泛应用于PX4和ArduPilot等开源无人机飞控固件中。通过自定义MAVLink消息&#xff0c;我们可以为无人机…...

Maven快速上手

在前面我们学习了许多关于JAVA的知识&#xff0c;从今天这个博客开始我们就要进入到JAVAEE进阶的学习中了&#xff0c;在这里你们可以学到项目是怎么被我们一步步写出来。让我们为之加油吧&#xff01;&#xff01;&#xff01;&#xff01; 本期讲解&#xff1a; 1.了解Maven…...

【Django】教程-5-ModelForm增删改查+规则校验【正则+钩子函数】

【Django】教程-1-安装创建项目目录结构介绍 【Django】教程-2-前端-目录结构介绍 【Django】教程-3-数据库相关介绍 【Django】教程-4-一个增删改查的Demo 11. ModelForm 11.1 models.py from django.utils import timezone from django.db import models# 数据库&#xff…...

JavaScript中 == 和 === 区别

== 运算符 它是相等运算符,用于比较两个 值 是否相等 ( 如果两个值的类型不同,它会尝试将它们转换为相同的类型,然后再比较。) 示例: console.log(1 == 1); // true,因为1被转换为数字1,所以相等 console.log(1 == true); // true,因为true被转换为数字1,所以相等…...

使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI

使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI 本篇摘要16. 使用LangChain Agents构建Gradio及Gradio Tool16.3 使用Langchain agents构建Gradio UI16.3.1 创建代理16.3.2 创建Gradio UI16.3.3 运行demo参考文献本章目录如下: 《使…...

scikit-surprise 智能推荐模块使用说明

目录 1、前言 2、算法 3、数据集 3.1 three built-in datasets are available: 3.2 Load a dataset from a pandas dataframe. 3.3 Load a dataset from a (custom) file. 3.4 Load a dataset where folds (for cross-validation) are predefined by some files. 4、pre…...

基于python开发的邮箱合并群发工具

智能邮件群发系统 一个基于Python和PyQt5开发的智能邮件群发工具&#xff0c;支持Word模板和Excel数据源的自动匹配&#xff0c;具有现代化UI界面和友好的用户体验。 Github项目地址&#xff1a;https://github.com/liugang926/Auto-mail-sent.git dist目录有编译好的exe程序&…...