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

动态规划 之 简单多状态 dp 问题 算法专题

一. 按摩师

按摩师

  1. 状态表示
    根据经验 + 题目要求
    dp[i] 表示: 选择到i位置时, 此时的最长预约时长
    但是根据题目又分成两种情况:
    f[i] : 选择到 i 位置的时候, nums[i] 必选, 此时的最长预约时长
    g[i] : 选择到 i 位置的时候, nums[i] 不选, 此时的最长预约时长
  2. 状态转移方程
    f[i] 如果i 位置必选, 那么f[i - 1] 位置必不选, 就等于g[i - 1] + nums[i]
    g[i] 如果i位置不选, 那么g[i - 1] 位置有两种情况, 如果[i - 1] 选, 那么就=f[i - 1] ,如果[i - 1] 不选, 那么就=g[i - 1] , 但是我们要的是最长时长, 所以
  • f[i] = g[i - 1] + nums[i]
  • g[i] = max(f[i - 1], g[i - 1])
  1. 初始化
    f[0] = nums[0] g[0] = 0;
  2. 填表顺序
    从左往右 两个表一起填
  3. 返回值
    返回max(f[n], g[n])
class Solution {public int massage(int[] nums) {//1. 建表//2. 初始化//3. 填表//4. 返回值int n = nums.length;if(n == 0) return 0;int[] f = new int[n];int[] g = new int[n];f[0] = nums[0];for(int i = 1; i < n; i++){f[i] = g[i - 1] + nums[i];g[i] = Math.max(f[i - 1], g[i - 1]);}return Math.max(f[n - 1], g[n - 1]);}
}

二. 打家劫舍II

打家劫舍II
分析: 通过分类讨论, 可以将环形的问题转化为线性问题
1.如果第0家偷, 那么第一家和最后一家就不能偷, 所以第二家和倒数第二家之间就可以按照正常的情况考虑
2.如果第0家不偷, 那么剩下的都可以正常进行了

  1. 状态表示
    根据经验 + 题目要求
    dp[i] 表示: 选择到i位置时, 此时偷的最大金额
    但是根据题目又分成两种情况:
    f[i] : 选择到 i 位置的时候, nums[i] 必选, 此时偷的最大金额
    g[i] : 选择到 i 位置的时候, nums[i] 不选, 此时偷的最大金额
  2. 状态转移方程
    f[i] 如果i 位置必选, 那么f[i - 1] 位置必不选, 就等于g[i - 1] + nums[i]
    g[i] 如果i位置不选, 那么g[i - 1] 位置有两种情况, 如果[i - 1] 选, 那么就=f[i - 1] ,如果[i - 1] 不选, 那么就=g[i - 1] , 但是我们要的是偷的最大金额, 所以
  • f[i] = g[i - 1] + nums[i]
  • g[i] = max(f[i - 1], g[i - 1])
  1. 初始化
    f[0] = nums[0] g[0] = 0;
  2. 填表顺序
    从左往右 两个表一起填
  3. 返回值
    返回第0家偷和不偷的最大值
class Solution {int[] f;int[] g;int[] nums;public int rob(int[] _nums) {// 1. 建表// 2. 初始化// 3. 填表// 4. 返回值nums = _nums;int n = _nums.length;int x = rob1(2, n - 2) + nums[0];int y = rob1(1, n - 1);return Math.max(x, y);}public int rob1(int left, int right) {if(left > right) return 0;int n = nums.length;f = new int[n];g = new int[n];f[left] = nums[left];for (int i = left; i <= right; i++) {f[i] = g[i - 1] + nums[i];g[i] = Math.max(g[i - 1], f[i - 1]);}return Math.max(f[right], g[right]);}}

三. 删除并获得点数

删除并获得点数
分析: 由于是删除大于或和小于的数, 也就是说相邻的数是不能再选的, 那么和打家劫舍问题是类似的
但是这些数并不是相邻的并且无序, 所以我们需要重新定义一个数组arr来存储
点数代表下标, 对应的值就是该点数的总和

  1. 状态表示
    根据经验 + 题目要求
    dp[i] 表示: 选择到i位置时, 此时获得的最大点数
    但是根据题目又分成两种情况:
    f[i] : 选择到 i 位置的时候, nums[i] 必选, 此时获得的最大点数
    g[i] : 选择到 i 位置的时候, nums[i] 不选, 此时获得的最大点数
  2. 状态转移方程
    f[i] 如果i 位置必选, 那么f[i - 1] 位置必不选, 就等于g[i - 1] + arr[i]
    g[i] 如果i位置不选, 那么g[i - 1] 位置有两种情况, 如果[i - 1] 选, 那么就=f[i - 1] ,如果[i - 1] 不选, 那么就=g[i - 1] , 但是我们要的是获得的最大点数, 所以
  • f[i] = g[i - 1] + nums[i]
  • g[i] = max(f[i - 1], g[i - 1])
  1. 初始化
    f[0] = arr[0] g[0] = 0;
  2. 填表顺序
    从左往右 两个表一起填
  3. 返回值
    返回max(f[n - 1], g[n - 1])
class Solution {public int deleteAndEarn(int[] nums) {//预处理int n = 10001;int[] arr = new int[n];for(int x: nums) arr[x] += x;//建表//初始化//填表//返回值int[] f = new int[n];int[] g = new int[n];f[0] = arr[0];for(int i = 1; i < n; i++){f[i] = g[i - 1] + arr[i];g[i] = Math.max(f[i - 1], g[i - 1]);}return Math.max(f[n - 1], g[n - 1]);}
}

四, 粉刷房子

粉刷房子

  1. 状态表示
    根据经验 + 题目要求
    dp[i] 表示: 选择到i位置时, 此时粉刷的最小花费
    但是根据题目又分成两种情况:
    如果第i个房子, 粉刷的是红色的, 那么前一个房子只能是蓝色或绿色, 同理其他情况
    所以dp可以弄成二维数组, dp[i][j] 表示最小费用, j表示颜色 0红色,1蓝色,2绿色
  2. 状态转移方程
    1.如果i选择红色, dp[i][0], 那么dp[i - 1]只能选择[1][2], 要的是最小花费, 所以
  • dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + costs[i - 1][0]

2.如果i选择蓝色, dp[i][0], 那么dp[i - 1]只能选择[1][2], 要的是最小花费, 所以

  • dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1]

3.如果i选择红色, dp[i][0], 那么dp[i - 1]只能选择[1][2], 要的是最小花费, 所以

  • dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + costs[i - 1][2]
  1. 初始化
    本道题初始化较为复杂, 所以使用虚拟节点来帮助我们初始化, 要注意两个注意事项: 初始化与对应关系
    最开始是0的位置最小花费应该初始化为0, 因为还没有花费
  2. 填表顺序
    从左往右 两个表一起填
  3. 返回值
    返回min(dp[n][0], dp[n][1], dp[n][2])
class Solution {public int minCost(int[][] costs) {int n = costs.length;int[][] dp = new int[n + 1][3];for(int i = 1; i <= n; i++){//i遍历的是行dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + costs[i - 1][0];dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1];dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + costs[i - 1][2];}return Math.min(Math.min(dp[n][0], dp[n][1]), dp[n][2]);}
}

五. 买卖股票的最佳时机含冷冻期

买卖股票的最佳时机含冷冻期

  1. 状态表示
    根据经验 + 题目要求
    dp[i] 表示: 选择到第i天位置时, 此时的最大利润
    但是到第i天又分成三种情况:
    可能处于"买入"状态, "可交易"状态, "冷冻期"状态
    所以用二维数组[i][j]状态表示 0"买入"状态, 1"可交易"状态, 2"冷冻期"状态
  2. 状态转移方程
    1.如果处于"买入"状态, 那么第i - 1天, 可能处于"买入"状态(i - 1天买完后第i天没卖, 等于啥也没干), 可能处于"可交易"状态(i - 1天不是冷冻期, 可以进行购买), 此时是需要-价格, 进行购买, 由于要最大利润, 对两次状态的结果取最大值
  • dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i])

2.如果处于"可交易"状态, 那么第i - 1天, 可能处于"可交易"状态(i - 1天之前就卖了, 第i天还没买, 等于啥也没干), 可能处于"冷冻期"状态(i - 1天卖了, 第i天还没买, 等于啥也没干), 由于要最大利润, 对两次状态的结果取最大值

  • dp[i][1] = max(dp[i - 1][1], dp[i - 1][2])

3.如果处于"冷冻期"状态, 那么第i - 1天, 可能处于"买入"状态(i - 1天买了, 第i天卖了), , 此时是需要+价格, 进行购买,

  • dp[i][2] =dp[i - 1][0] + price[i]
  1. 初始化
    只需对0位置进行初始化
    dp[0][0] 说明买了股票, 利润为-prices[0]
    dp[0][1] 说明可以买, 利润为0
    dp[0][2] 说明冷冻期, 利润为0
  2. 填表顺序
    从左往右 三个表一起填
  3. 返回值
    返回max(dp[n - 1][0], dp[n - 1][1], dp[n - 1][2])
class Solution {public int maxProfit(int[] prices) {int n = prices.length;int[][] dp = new int[n][3];dp[0][0] = -prices[0];for(int i = 1; i < n; i++){dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][2]);dp[i][2] =dp[i - 1][0] + prices[i];}return Math.max(Math.max(dp[n - 1][0], dp[n - 1][1]), dp[n - 1][2]);}
}

六. 买卖股票的最佳时机含手续费

买卖股票的最佳时机含手续费

  1. 状态表示
    根据经验 + 题目要求
    dp[i] 表示: 选择到第i天位置时, 此时的最大利润
  2. 状态转移方程
    第i天位置时, 有两种情况
    1.可能处于"买入"状态
    那么i - 1 位置可能是"买入"状态(啥也不干), 可能是"可交易"状态(买股票)
    f[i] = max(f[i - 1], g[i - 1] - p[i])
    2.可能处于"可交易"状态
    那么i - 1 位置可能是"买入"状态(卖股票, 再加上手续费), 可能是"可交易"状态(啥也不干)
    g[i] = max(f[i - 1] + p[i] - fee, g[i - 1])
  3. 初始化
    f[0] = -p[0] g[0] = 0
  4. 填表顺序
    从左往右 两个表一起填
  5. 返回值
    max(g[n - 1], f[n - 1])
class Solution {public int maxProfit(int[] prices, int fee) {int n = prices.length;int[] f = new int[n];int[] g = new int[n];f[0] = -prices[0];for(int i = 1; i < n; i++){f[i] = Math.max(f[i - 1], g[i - 1] - prices[i]);g[i] = Math.max(f[i - 1] + prices[i] - fee, g[i - 1]);}return Math.max(g[n - 1], f[n - 1]);}
}

七. 买卖股票的最佳时机III

买卖股票的最佳时机III

  1. 状态表示
    根据经验 + 题目要求
    dp[i] 表示: 选择到第i天结束之后, 此时的最大利润
    第i天位置时, 有两种情况, "买入"状态 和 "可交易"状态, 但是还要记录交易次数, 所以我们要使用二维数组
  2. 状态转移方程
    1.第i天可能处于"买入"状态, 此时完成了j次交易, i为最大利润
    那么i - 1 位置可能是"买入"状态(啥也不干), 可能是"可交易"状态(买股票)
    f[i][j] = max(f[i - 1][j], g[i - 1][j] - p[i])
    2.第i天可能处于"可交易"状态, 此时完成了j次交易, i为最大利润
    那么i - 1 位置可能是"买入"状态(卖股票, 交易次数 + 1), 可能是"可交易"状态(啥也不干)
    g[i][j] = max(f[i - 1][j - 1] + p[i], g[i - 1][j])
  3. 初始化
    f需要初始化第一行, g需要初始化第一行第一列
    所以我们可以修改一下状态转移方程, 只初始化第一行即可
    g[i][j] = g[i - 1][j];
    if(j - 1 >= 0) max(f[i - 1][j - 1] + p[i], g[i][j])

f[0][0] = -p[0] 第0天不可能完成多笔交易, 所以第一行其余填-0x3f3f3f3f (INT_MIN的一半, 不初始化为INT_MIN, 防止溢出
g[0][0] = 0 第一行其余填-0x3f3f3f3f
4. 填表顺序
从左往右 从上往下 两个表一起填
5. 返回值
返回可交易表最后一行的最大值

class Solution {public int maxProfit(int[] prices) {int n = prices.length;int INF = 0x3f3f3f3f;int[][] f = new int[n][3];int[][] g = new int[n][3];for(int j = 0; j < 3; j++){f[0][j] = g[0][j] = -INF;}f[0][0] = -prices[0];g[0][0] = 0;for(int i = 1; i < n; i++){for(int j = 0; j < 3; j++){f[i][j] = Math.max(f[i - 1][j], g[i - 1][j] - prices[i]);g[i][j] = g[i - 1][j];if(j - 1 >= 0) g[i][j] = Math.max(g[i][j], f[i - 1][j - 1] + prices[i]);}}int ret = 0;for(int j = 0; j < 3; j++){ret = Math.max(ret, g[n - 1][j]);}return ret;}
}

八. 买卖股票的最佳时机IV

买卖股票的最佳时机IV

  1. 状态表示
    根据经验 + 题目要求
    dp[i] 表示: 选择到第i天结束之后, 此时的最大利润
    第i天位置时, 有两种情况, "买入"状态 和 "可交易"状态, 但是还要记录交易次数, 所以我们要使用二维数组
  2. 状态转移方程
    1.第i天可能处于"买入"状态, 此时完成了j次交易, i为最大利润
    那么i - 1 位置可能是"买入"状态(啥也不干), 可能是"可交易"状态(买股票)
    f[i][j] = max(f[i - 1][j], g[i - 1][j] - p[i])
    2.第i天可能处于"可交易"状态, 此时完成了j次交易, i为最大利润
    那么i - 1 位置可能是"买入"状态(卖股票, 交易次数 + 1), 可能是"可交易"状态(啥也不干)
    g[i][j] = max(f[i - 1][j - 1] + p[i], g[i - 1][j])
  3. 初始化
    f需要初始化第一行, g需要初始化第一行第一列
    所以我们可以修改一下状态转移方程, 只初始化第一行即可
    g[i][j] = g[i - 1][j];
    if(j - 1 >= 0) max(f[i - 1][j - 1] + p[i], g[i][j])

f[0][0] = -p[0] 第0天不可能完成多笔交易, 所以第一行其余填-0x3f3f3f3f (INT_MIN的一半, 不初始化为INT_MIN, 防止溢出
g[0][0] = 0 第一行其余填-0x3f3f3f3f
4. 填表顺序
从左往右 从上往下 两个表一起填
5. 返回值
返回可交易表最后一行的最大值

class Solution {public int maxProfit(int k, int[] prices) {int n = prices.length;k = Math.min(k, n / 2);int INF = 0x3f3f3f3f;int[][] f = new int[n][k + 1];int[][] g = new int[n][k + 1];for(int j = 0; j <= k; j++){f[0][j] = g[0][j] = -INF;}f[0][0] = -prices[0];g[0][0] = 0;for(int i = 1; i < n; i++){for(int j = 0; j <= k; j++){f[i][j] = Math.max(f[i - 1][j], g[i - 1][j] - prices[i]);g[i][j] = g[i - 1][j];if(j - 1 >= 0) g[i][j] = Math.max(g[i][j], f[i - 1][j - 1] + prices[i]);}}int ret = 0;for(int j = 0; j <= k; j++){ret = Math.max(ret, g[n - 1][j]);}return ret;}
}

相关文章:

动态规划 之 简单多状态 dp 问题 算法专题

一. 按摩师 按摩师 状态表示 根据经验 题目要求 dp[i] 表示: 选择到i位置时, 此时的最长预约时长 但是根据题目又分成两种情况: f[i] : 选择到 i 位置的时候, nums[i] 必选, 此时的最长预约时长 g[i] : 选择到 i 位置的时候, nums[i] 不选, 此时的最长预约时长状态转移方程 …...

qt QPixmapCache详解

1、概述 QPixmapCache是Qt框架中提供的一个功能强大的图像缓存管理工具类。它允许开发者在全局范围内缓存QPixmap对象&#xff0c;从而有效减少图像的重复加载&#xff0c;提高图像加载和显示的效率。这对于需要频繁加载和显示图像的用户界面应用来说尤为重要&#xff0c;能够…...

Redis中的持久化

什么是 Redis 持久化&#xff1f; Redis 是一个内存数据库&#xff0c;也就是说它主要把数据存储在内存中&#xff0c;这样可以实现非常高的读写速度。通常&#xff0c;内存数据库是非常快速且高效的&#xff0c;但它也有一个很大的问题&#xff1a;数据丢失的风险。因为当 Red…...

Unity 如何优雅的限定文本长度, 包含对特殊字符,汉字,数字的处理。实际的案例包括 用户昵称

常规限定文本长度 ( 通过 UntiyEngine.UI.Inputfiled 附带的长度限定 ) 痛点1 无法对中文&#xff0c;数字&#xff0c;英文进行识别&#xff0c;同样数量的汉字和同样数量的英文像素长度是不一样的&#xff0c;当我们限定固定长度后&#xff0c;在界面上的排版不够美观 痛点2…...

SMO+PLL滑膜观测器、MARS模型参考自适应观测器simulink仿真

模型内容介绍&#xff1a; &#xff08;1&#xff09;SMOPLL滑膜观测器通过SMO估计电机的转速和位置信息&#xff0c;并利用PLL技术对这些信息进行跟踪和校正&#xff0c;以实现高精度的电机控制&#xff1b; &#xff08;2&#xff09;MARS是一种基于模型参考自适应控制理论…...

例题解析:利用异或运算(XOR)找出单独的数

异或运算&#xff08;XOR&#xff09; 异或运算是一种位运算&#xff0c;通常用符号 ^ 表示。它的运算规则如下&#xff1a; 如果两个二进制位相同&#xff0c;结果为 0。如果两个二进制位不同&#xff0c;结果为 1。 具体来说&#xff0c;对于两个二进制位 a 和 b&#xff…...

如何处理微信小程序大量未捕获的异常

1&#xff09;如何处理微信小程序大量未捕获的异常 2&#xff09;如何关闭代码创建的纹理的读写&#xff0c;或者创建不带读写的图片 3&#xff09;回收带有贴图和Collider的Mesh&#xff0c;如何正确用对象池维护 4&#xff09;Cloth组件使用在一个篮筐上&#xff0c;运行后篮…...

C#-StringBuilder

string&#xff1a;特殊的引用 每次重新赋值或者拼接时会分配新的内存空间&#xff0c;如果一个字符串经常改变会非常浪费空间。 StringBuilder&#xff1a;C#提供的一个用于处理字符串的公共类 修改字符串而不创建新的对象&#xff0c;需要频繁修改和拼接的字符串可以使用它…...

SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-39/ 本关是堆…...

linux安装zookeeper和kafka集群

linux安装zookeeper和kafka集群 一、Zookeeper集群部署安装zookeeper1. 下载2. 上传, 解压3. 配置 Zookeeper 节点4. 创建 myid 文件5. 启动参数更改6. sh文件授权7. 启动集群8. 防火墙开启端口 验证集群 二、kafka集群安装安装Kafka1. 下载Kafka安装包2. 上传到服务器&#xf…...

洞悉 Linux 系统运行细节,使用 atop 监测和回看系统负载状态

Linux系统的资源使用情况&#xff0c;你可以通过使用命令如free、top和netstat来实时监控内存、CPU及端口的使用状态。对于需要追踪历史资源消耗动态的场景&#xff0c;atop命令则能有效帮助用户查看过去的系统负载情况。 本篇教程的灵感源自一位小伙伴的真实经历&#xff1a;…...

“双十一”电商狂欢进行时,在AI的加持下看网易云信IM、RTC如何助力商家!

作为一年一度的消费盛会&#xff0c;2024年“双十一”购物狂欢节早已拉开帷幕。蹲守直播间、在主播热情介绍中点开链接并加购&#xff0c;也已成为大多数人打开“双11”的重要方式。然而&#xff0c;在这火热的购物氛围背后&#xff0c;主播频频“翻车”、优质主播稀缺、客服响…...

Python调用企业微信的扫一扫

在企业微信里面新建了一个应用&#xff0c;指向了搭建服务器上Django写的web应用。 web应用需要使用扫描二维码的功能&#xff0c;就使用了大家都评价效果好的微信的扫一扫&#xff0c;事实也证明微信的扫一扫很好&#xff0c;但实现这个功能还是花了自己不少时间&#xff0c;很…...

速盾:CDN和OBS能共用流量包吗?

CDN和OBS是两种不同的云服务&#xff0c;它们在内容分发和存储方面有着不同的功能和优势。虽然它们都可以用于提供高效的内容分发和存储服务&#xff0c;但是它们的流量包是不能共用的。 CDN&#xff0c;即内容分发网络&#xff0c;是一种通过将内容存储在全球分布的服务器上&…...

第8章 利用CSS制作导航菜单

8.1 水平顶部导航栏 水平莱单导航栏是网站设计中应用范围最广的导航设计&#xff0c;一般放置在页面的顶部。水平 导航适用性强&#xff0c;几乎所有类型的网站都可以使用&#xff0c;设计难度较低。 如果导航过于普通&#xff0c;无法容纳复杂的信息结构&#xff0c;就需要在…...

C# 集合与泛型

文章目录 前言1.什么是集合&#xff1f;2.非泛型集合&#xff08;了解即可&#xff09;2.1常见的非泛型集合 3.泛型的概念4.常用的泛型集合4.1 List < T > <T> <T>4.2 Dictionary<TKey, TValue>4.3 Queue < T > <T> <T>4.4 S t a c…...

el-date-picker 设置开始时间和结束时间

<el-date-picker v-model"ruleForm.RECORDDATE" type"date" placeholder"日期" format"YYYY/M/D" value-format"YYYY/M/D" style"width: 100%;" :disabled-date"publishDateAfter" > </el-dat…...

【Docker】 常用命令

文章目录 介绍Docker和容器化技术什么是Docker&#xff1f;Docker的优势和应用场景Docker的应用场景包括但不限于&#xff1a; 安装和配置Docker安装Docker引擎配置Docker环境 Docker镜像命令搜索镜像拉取镜像查看本地镜像删除本地镜像 Docker容器命令创建容器启动容器停止容器…...

docker compose - 设置名字

只使用 docker compose up 启动容器&#xff0c;默认名字为当前文件夹的名字 设置 project-name&#xff0c;docker 客户端会显示设置的名字&#xff0c;方便区分 docker compose --project-name webtest up错误&#xff1a; docker compose up --project-name webtest 效果…...

工业拍卖平台、信息发布、租赁商城平台系统适用于全行业解决方案。

工业拍卖平台系统是为工业领域的资产交易、设备处置等提供线上拍卖服务的数字化平台。 主要功能&#xff1a; 拍卖信息发布&#xff1a;平台会展示待拍卖的工业资产详细信息&#xff0c;包括设备的名称、型号、规格、使用年限、生产厂家等基本信息&#xff0c;以及资产的图片…...

nginx部署

配置阿里云yum源 安装如下编译工具 yum install -y gcc gcc-c autoconf automake make #安装使用nginx还得安装nginx所需的一些第三方系统库的支持&#xff0c;比如nginx的静态资源压缩功能所需的gzip lib库&#xff0c;nginx需要支持URL重写&#xff0c;所需的pcre库&…...

CSS中justify-content: space-between首尾贴边中间等距(两端元素紧贴左右边缘,中间元素等距均匀分布)

justify-content: space-between; 是 CSS Flexbox 布局中的一个属性值&#xff0c;主要作用是在弹性容器的主轴方向上均匀分布子元素&#xff0c;具有以下核心特性&#xff1a; 作用效果&#xff1a; 首尾贴边 第一个子元素紧贴容器起始端 最后一个子元素紧贴容器结束端 中…...

RKNN3588上部署 RTDETRV2

RT-DETR V2 是由百度研究团队在 2024年 提出的&#xff0c;是其广受好评的实时目标检测模型 RT-DETR 的重大升级版本。它继承了第一代 RT-DETR 利用 Transformer 架构实现端到端目标检测 和 卓越实时性能 的核心优势&#xff0c;并针对模型精度、训练效率和部署灵活性进行了全方…...

MySQL(56)什么是复合索引?

复合索引&#xff08;Composite Index&#xff09;&#xff0c;也称为多列索引&#xff0c;是在数据库表的多列上创建的索引。它可以提高涉及多个列的查询性能&#xff0c;通过组合多个列的值来索引数据。复合索引特别适用于需要同时过滤多列的查询。 复合索引的优点 提高多列…...

亚马逊AWS云服务器高效使用指南:最大限度降低成本的实战策略

对于初次接触云计算的企业或个人开发者而言&#xff0c;亚马逊云服务器&#xff08;Amazon EC2&#xff09;的配置与成本控制往往面临双重挑战&#xff1a;既要理解数百种实例规格的技术参数&#xff0c;又要避免因配置不当导致的资源浪费。本文将深入剖析AWS EC2的核心使用场景…...

WEB3技术重要吗,还是可有可无?

我从几个角度给你一个全面、理性、技术导向的回答&#xff1a; ✅ 一、Web3 技术的重要性&#xff1a;“有意义&#xff0c;但不是万能” Web3 技术并不是可有可无的噱头&#xff0c;而是一种在特定场景下提供独特价值的技术体系。 它重要的原因包括&#xff1a; 1. 重构数字…...

day26-计算机网络-4

1. tcp的11种状态 ss -ant -a 表示看所有状态 -n 表示不将ip解析为主机名 -t 表示tcp 1.1. closed状态&#xff08;客户端、服务端&#xff09; 客户端发起建立连接前的状态服务端启动服务前的状态 1.2. listen状态&#xff08;服务端&#xff09; 服务端软件运行的时候状…...

以人类演示视频为提示,学习可泛化的机器人策略

25年5月来自清华大学、上海姚期智研究院和星动纪元&#xff08;RoboEra&#xff09;公司的论文“Learning Generalizable Robot Policy with Human Demonstration Video as a Prompt”。 最近的机器人学习方法通​​常依赖于从通过遥操作收集的大量机器人数据集中进行模仿学习…...

一个自动反汇编脚本

一、环境 wsl ubuntu18.04、python3.6 二、目的 调试程序&#xff0c;需要分析第三方库。希望能将多个库自动转为汇编文件。 三、使用方法 将该脚本下载&#xff0c;进入wsl&#xff0c;进入到该脚本所有文件夹。 请使用 python 脚本名.py 运行。 1&#xff09;、运行…...

2. 库的操作

2.1 创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name # 字符集: 存储编码 [DEFAULT] COLLATE collation_name # 校验集: 比较/选择/读…...