数据结构与算法学习笔记(Acwing 提高课)----动态规划·状态机模型
数据结构与算法学习笔记----动态规划·状态机模型
@@ author: 明月清了个风
@@ first publish time: 2025.5.20ps⭐️背包终于结束了,状态机模型题目不多。状态机其实是一种另类的状态表示方法,将某一个点扩展为一个状态进行保存并在多个状态之间转移,具体的来看题目理解吧。
Acwing 1049. 大盗阿福
阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。
这条街上一共有$N $家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。
作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?
输入格式
输入的第一行是一个整数 T T T,表示一共有 T T T组数据。
接下来的每组数据,第一行是一个整数 N N N ,表示一共有N家店铺。第二行是 N N N个被空格分开的正整数,表示每一家店铺中的现金数量。每家店铺中的现金数量均不超过1000。
输出格式
对于每组数据,输出一行。该行包含一个整数,表示阿福在不惊动警察的情况下可以得到的现金数量。
数据范围
1 ≤ T ≤ 50 1 \le T \le 50 1≤T≤50,
1 ≤ N ≤ 100000 1 \le N \le 100000 1≤N≤100000
思路
很明显,这道题是一道线性的问题,题目并没有对抢劫的顺序有特殊的规定,因此可以从前往后。
对于状态表示而言,使用 f [ i ] f[i] f[i]表示抢劫前 i i i家店的最大收益。
然后就是状态划分,同样根据最后一步的选择进行,若不抢劫第 i i i家店铺,那就是 f [ i − 1 ] f[i - 1] f[i−1],若抢劫第 i i i家店铺,那么意味着第 i − 1 i - 1 i−1家店铺就无法选择了,因此相当于只能从前 i − 2 i - 2 i−2家店铺进行选择的最大值 f [ i − 2 ] + w [ i ] f[i - 2] + w[i] f[i−2]+w[i]。
但是上述分析其实在更新一个状态时,用到了前面两次的状态,下面考虑如何进行优化。
在上面的分析中,当仅用上一轮的状态也就是不知道第 i − 2 i - 2 i−2的状态,如果我们抢劫第 i i i家店铺的时候,无法知道在最优解中第 i − 1 i - 1 i−1家店铺是否被抢劫了,无法进行转移,因此引入状态机的表示方法,将所有状态表示为 f [ i ] [ 0 ] f[i][0] f[i][0]与 f [ i ] [ 1 ] f[i][1] f[i][1], 0 0 0表示当前店铺未选择, 1 1 1表示当前店铺被选择了,这样就将每个店铺的两个状态分开了,对于 f [ i ] [ 0 ] f[i][0] f[i][0],表示第 i i i个店铺没有被选择,因此可以从 f [ i − 1 ] [ 1 ] f[i - 1][1] f[i−1][1]或 f [ i − 1 ] [ 0 ] f[i - 1][0] f[i−1][0]转移过来;对于 f [ i ] [ 1 ] f[i][1] f[i][1],表示第 i i i个店铺被选择了,因此只能从 f [ i − 1 ] [ 0 ] f[i - 1][0] f[i−1][0]转移过来。
代码
#include <iostream>
#include <cstring>using namespace std;const int N = 10010, inf = 0x3f3f3f3f;int T;
int n;
int f[N][2];
int w[N];int main()
{cin >> T;while(T --){cin >> n;for(int i = 1; i <= n; i ++) cin >> w[i];f[0][0] = 0, f[0][1] = -0x3f3f3f3f;for(int i = 1; i <= n; i ++){f[i][0] = max(f[i - 1][0], f[i - 1][1]);f[i][1] = f[i - 1][0] + w[i];}cout << max(f[n][1], f[n][0]) << endl;}return 0;
}
Acwing 1057. 股票买卖 IV
给定一个长度为 N N N的数组,数组中的第 i i i个数字表示一个给定股票在第 i i i天的价格。
设计一个算法来计算你所能获取的最大利润,你最多可以完成 k k k笔交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。一次买入卖出合为一笔交易。
输入格式
第一行包含整数 N N N和 k k k,表示数组的长度以及你可以完成的最大交易笔数。
第二行包含 N N N个不超过 10000 10000 10000的非负整数,表示完整的数组。
输出格式
输出一个整数,表示最大利润。
数据范围
1 ≤ N ≤ 10 5 1 \le N \le 10^5 1≤N≤105,
1 ≤ k ≤ 100 1 \le k \le 100 1≤k≤100
思路
这道题很明显也可以看成两个状态,一个是手中有股票(已经买入了一个股票),另一个是手中没有股票(可以买入一个股票),那么状态的转移是:手中有股票时可以卖出不可以再次买入,也可以什么都不做;手中无股票时可以买入不可以卖出,也可以什么都不做。
当在某一天要卖出股票时,相当于获得这一天的权重 w [ i ] w[i] w[i];当要在某一天买入时,就要减去当天的权重 w [ i ] w[i] w[i]。
搞清楚题目的意思后,可以看状态表示了,使用 f [ i ] [ j ] [ 0 ] f[i][j][0] f[i][j][0]和 f [ i ] [ j ] [ 1 ] f[i][j][1] f[i][j][1]表示前 i i i天完成了 j j j笔交易且当前的状态为 0 0 0或 1 1 1。 0 0 0表示手中没有股票, 1 1 1表示手中有股票,也就是正在进行第 j j j次交易,属性就是集合的最大值。
那么对于状态转移, f [ i ] [ j ] [ 0 ] f[i][j][0] f[i][j][0]可以从 f [ i − 1 ] [ j ] [ 0 ] f[i - 1][j][0] f[i−1][j][0]走过来,也可以从 f [ i − 1 ] [ j ] [ 1 ] f[i - 1][j][1] f[i−1][j][1]转移过来,因此 f [ i ] [ j ] [ 0 ] = m a x ( f [ i − 1 ] [ j ] [ 0 ] , f [ i − 1 ] [ j ] [ 1 ] + w [ i ] ) f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j][1] + w[i]) f[i][j][0]=max(f[i−1][j][0],f[i−1][j][1]+w[i]);对于 f [ i ] [ j ] [ 1 ] f[i][j][1] f[i][j][1]来说,其状态转移方程为 f [ i ] [ j ] [ 1 ] = m a x ( f [ i − 1 ] [ j ] [ 1 ] , f [ i − 1 [ j − 1 ] [ 0 ] ] − w [ i ] ) f[i][j][1] = max(f[i - 1][j][1], f[i - 1[j - 1][0]] - w[i]) f[i][j][1]=max(f[i−1][j][1],f[i−1[j−1][0]]−w[i]).
需要注意的是初始化状态,当交易次数为 0 0 0的时候,手中不可能持有股票,因此都为非法状态,需要进行标记,而交易次数为 0 0 0时,手中没有股票为合法状态,初始化为 0 0 0即可。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;const int N = 100010, M = 110;int n, m;
int w[N];
int f[N][M][2];int main()
{cin >> n >> m;for(int i = 1; i <= n; i ++) cin >> w[i];memset(f, -0x3f, sizeof f);for(int i = 0; i <= n; i ++) f[i][0][0] = 0;for(int i = 1; i <= n; i ++){for(int j = 1; j <= m; j ++){f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j][1] + w[i]);f[i][j][1] = max(f[i - 1][j][1], f[i - 1][j - 1][0] - w[i]);}}int res = 0;for(int i = 1; i <= m; i ++) res = max(res, f[n][i][0]);cout << res << endl;return 0;
}
Acwing 1058. 股票买卖V
给定一个长度为 N N N的数组,数组中的第 i i i个数字表示一个给定股票在第 i i i天的价格。
设计一个算法来计算你所能获取的最大利润,在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一只股票)
- 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
- 卖出股票后,你无法在第二天买入股票(即冷却期为 1 1 1天)。
输入格式
第一行包含整数 N N N,表示数组长度。
第二行包含 N N N个不超过 10000 10000 10000的正整数,表示完整的数组。
输出格式
输出一个整数,表示最大利润。
数据范围
1 ≤ N ≤ 10 5 1 \le N \le 10^5 1≤N≤105,
思路
在这一题中添加了一个条件,在交易过后会有一天的冷冻期,因此变成了三个状态:手中有股票,手中没有股票的第一天,手中没有股票的第 ≥ 2 \ge 2 ≥2天。相当于把上一题中的第二个状态再次进行了分割。
这三个状态的转换关系如下:
手中有货可由手中有货转移而来,他可转移至手中无货的第一天(即第二种状态),手中无货的第一天只能向第三种状态进行转移;第三种状态可以转移到自身,也可转移到手中有货(即第一种状态)。
同样地,可以使用 f [ i ] [ 0 ] , f [ i ] [ 1 ] , f [ i ] [ 2 ] f[i][0],f[i][1],f[i][2] f[i][0],f[i][1],f[i][2]表示这三种状态,三种状态的转移方程如下:
f [ i ] [ 0 ] = m a x ( f [ i − 1 ] [ 0 ] , f [ i − 1 ] [ 2 ] − w [ i ] ) f[i][0] = max(f[i - 1][0], f[i - 1][2] - w[i]) f[i][0]=max(f[i−1][0],f[i−1][2]−w[i])
f [ i ] [ 1 ] = f [ i − 1 ] [ 0 ] + w [ i ] f[i][1] = f[i - 1][0] + w[i] f[i][1]=f[i−1][0]+w[i]
f [ i ] [ 2 ] = m a x ( f [ i − 1 ] [ 1 ] , f [ i − 1 ] [ 2 ] ) f[i][2] = max(f[i - 1][1], f[i - 1][2]) f[i][2]=max(f[i−1][1],f[i−1][2])
然后就是考虑初始化的问题,前两个状态在刚开始时都是非法状态,即 f [ 0 ] [ 0 ] , f [ 0 ] [ 1 ] f[0][0],f[0][1] f[0][0],f[0][1];只要将 f [ 0 ] [ 2 ] f[0][2] f[0][2]初始化为 0 0 0即可。
还有一个情况就是数据是单调下降的,也就是股票一直在跌,最优解就是什么都不做,因此最后的答案可能出现在 f [ n ] [ 1 ] f[n][1] f[n][1]与 f [ n ] [ 2 ] f[n][2] f[n][2]中。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;const int N = 100010, inf = 0x3f3f3f3f;int n;
int w[N];
int f[N][3];int main()
{cin >> n;for(int i = 1; i <= n; i ++) cin >> w[i];f[0][0] = f[0][1] = -inf;f[0][2] = 0;for(int i = 1; i <= n; i ++){f[i][0] = max(f[i - 1][0], f[i - 1][2] - w[i]);f[i][1] = f[i - ][0] + w[i];f[i][2] = max(f[i - 1][1], f[i - 1][2]);}cout << max(f[n][1], f[n][2]) << endl;return 0;
}
Acwing 1052. 设计密码
你现在需要设计一个密码 S S S, S S S需满足:
- S S S的长度是 N N N;
- S S S只包含小写英文字母;
- S S S不包含子串 T T T;
例如, a b c abc abc是 a b c d e abcde abcde的子串, a b d abd abd不是 a b c d e abcde abcde的子串。
请问共有多少种不同的密码满足要求?
由于答案会非常大,请输出答案模 10 9 + 7 10^9 + 7 109+7的余数。
输入格式
第一行包含整数 N N N,表示密码的长度。
第二行输入字符串 T T T, T T T中只包含小写字母。
输出格式
输出一个正整数,表示总方案数模 10 9 + 7 10^9 + 7 109+7后的结果。
数据范围
1 ≤ N ≤ 50 1 \le N \le 50 1≤N≤50,
1 ≤ ∣ T ∣ ≤ n 1 \le |T| \le n 1≤∣T∣≤n, ∣ T ∣ |T| ∣T∣是 T T T的长度。
思路
这一题要用到基础课中的 K M P KMP KMP算法,最好去复习一下,链接在这,它是一个字符串匹配算法,目的是为了尽可能多的利用已知的信息进行匹配。暴力匹配的两个字符串的最坏情况是 O ( n ∗ m ) O(n * m) O(n∗m),而 K M P KMP KMP算法可以将其降到 O ( n + m ) O(n + m) O(n+m)。具体来说, K M P KMP KMP算法的核心是 n e x t next next数组,其存有的信息代表着:当模式串与文本串匹配不成功时,模式串应该向右移动到什么位置,即跳过一步一步向右移动的过程。需要注意的是 n e x t next next数组是对模式串而言的,而不是对待匹配的文本串。
n e x t next next数组的具体定义是: n e x t [ i ] next[i] next[i]表示模式串 P [ 0 ⋯ i − 1 ] P[0\cdots i - 1] P[0⋯i−1]的最长公共前后缀的长度。
根据题意,我们需要使用 26 26 26个小写字母构造一个长度为 n n n的字符串 S S S,且 T T T不是字符串的子串,那么每一位密码有 26 26 26种选择,因此最坏就有 26 n 26^n 26n种方案。
为了使构造的密码 S S S中不包含字符创 T T T,那就意味着要使匹配的过程无法到达 T T T的最后一位.
首先先通过 K M P KMP KMP处理出模式串 T T T的 n e x t next next数组,对于这道题的状态表示,使用 f [ i ] [ j ] f[i][j] f[i][j]表示已经构造了前 i i i位,且与模式串 T T T匹配到了 j j j位(很明显, j j j不能到 m = s t r l e n ( T ) m = strlen(T) m=strlen(T))。
代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>using namespace std;const int N =60, mod = 1e9 + 7;int n;
int ne[N];
char str[N];
int f[N][N];int main()
{cin >> n >> str + 1;for(int i = 2, j = 0; i <= n; i ++){while(j && str[i] != str[j + 1]) j = ne[j];if(str[i] == str[j + 1]) j ++;ne[i] = j;}f[0][0] = 1;for(int i = 0; i < n; i ++)for(int j = 0; j < m; j ++)for(char k = 'a'; k <= 'z'; k ++){int u = j;while(u && k != str[u + 1]) u = ne[u];if(k == str[u + 1]) u ++;f[i + 1][u] = (f[i + 1][u] + f[i][j]) % mod;}int res = 0;for(int i = 0; i < m; i ++) res = (res + f[n][i]) % mod;cout <<res << endl;return 0;
}
相关文章:
数据结构与算法学习笔记(Acwing 提高课)----动态规划·状态机模型
数据结构与算法学习笔记----动态规划状态机模型 author: 明月清了个风 first publish time: 2025.5.20 ps⭐️背包终于结束了,状态机模型题目不多。状态机其实是一种另类的状态表示方法,将某一个点扩展为一个状态进行保存并在多个状态之间转移…...
Vue 3.0 中 Teleport 详解
Teleport 是 Vue 3.0 引入的一个非常有用的特性,它允许你将组件的一部分模板"传送"到 DOM 中的其他位置,而不改变组件的逻辑层次结构。 1. 基本概念 Teleport 的主要用途是将某些 DOM 元素渲染到 Vue 应用之外的 DOM 节点中,这在…...
Linux在防火墙中添加开放端口
例如:安装docker时启动报错: Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 此时开放对应端口号就可以咯 在防…...
day24:零基础学嵌入式之系统编程
一、系统编程包含 文件的读写、和常用操作,操作系统已经进入多任务时代,在同一时刻同时运行多个程序。 二、标准io;stdio.h(以计算机为中心) 1.头文件路径:/usr/include/stdio.h so动态库:st…...
2.10 财务分析
10.1 财务报告构成及列报基本要求 10.1.1 财务报告 1.财务报告的构成 资产负债表、利润表、现金流量表、所有者权益变动表和附注小型企业可不编现金流量表。 2.财务报表及其作用 1.资产负债表的内容及其作用 内容 资产类、流动性大小顺序排序。流动资产、非流动资产负债和…...
docker容器知识
一、docker与docker compose区别: 1、docker是创建和管理单个容器的工具,适合简单的应用或服务; 2、docker compose是管理多容器应用的工具,适合复杂的、多服务的应用程序; 3、docker与docker compose对比ÿ…...
国标GB28181视频EasyGBS视频监控平台搭建城市交通道路可视化管理/道路视频巡检/应急监控指挥
一、方案背景 随着城市人口与车辆激增,交通管理面临严峻挑战:高峰期道路拥堵、事故处理滞后、违法取证低效,传统管理模式难以为继。智慧交通依托信息技术,成为破局关键,其中视频监控是实现精细化管理的核心。国标GB…...
【LeetCode 热题 100】有效的括号 / 最小栈 / 字符串解码 / 柱状图中最大的矩形
⭐️个人主页:小羊 ⭐️所属专栏:LeetCode 热题 100 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 栈有效的括号最小栈字符串解码每日温度柱状图中最大的矩形 堆数组中的第K个最大元素 栈 有效的括号 有效的括号 cl…...
Oracle中如何解决BUFFER BUSY WAITS
和BUFFER CACHE相关的常见等待事件还有BUFFER BUSY WAITS。顾名思义,BUFFER BUSY WAITS等待事件指的是多个会话不能共享缓冲区中的数据块而引发的等待事件。 发生BUFFER BUSY WAITS事件时,P1值代表数据文件号,P2值代表数据块号,P3…...
LeetCode 93.复原IP地址 LeetCode 78.子集 LeetCode 90.子集II
LeetCode 93.复原IP地址 其实思想跟回文字符串那道题是类似的,但难点在于这道题的终止条件和判断是否IP地址进行划分后是否合理? 思路: 通过一个int类型的全局变量来记载 " . " 的数目 / 记录你当前所获得的小数组的数目&#x…...
Java转Go日记(四十一):Gorm删除
1.1.1. 删除/软删除 警告删除记录时,需要确保其主要字段具有值,GORM将使用主键删除记录,如果主要字段为空,GORM将删除模型的所有记录 // 删除存在的记录db.Delete(&email)DELETE from emails where id10;// 为Delete语句添加…...
Java基于SpringBoot的公交智能化系统,附源码+文档说明
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
电子电器架构 --- 汽车高性能计算
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
Journal of Real-Time Image Processing 投稿过程
投稿要求双栏12页以内(包括参考文献),这个排版要求感觉不是很严格,我当时就是用普通的双栏的格式去拍的版,然后就提交了,也没单独去下载模版。 投稿过程 12.12 Submission received 12.12 Submission is under technical check 1…...
利用basee64特性 -- BYUCTF 2025 JWTF
题目信息: Unfortunately one of our JWTs was compromised by attackers, so we created a JWT Revocation List to ensure they can’t use it anymore. 代码量很少 # 导入必要的模块 # 从 flask 模块导入 Flask, request, redirect, make_response, jsonify 类和函数 from f…...
湖北理元理律师事务所:科学债务规划如何平衡还款与生活
在债务压力普遍加剧的背景下,如何通过专业规划实现“还款不停生活”,成为许多债务人关注的核心问题。湖北理元理律师事务所基于多年实务经验,总结出一套兼顾法律合规性与人性化需求的债务管理方案,其核心逻辑在于通过法律工具优化…...
1.1HarmonyOS NEXT技术架构深度解析:微内核架构与系统分层
HarmonyOS NEXT技术架构深度解析:微内核架构与系统分层 摘要 作为面向万物互联时代的全场景操作系统,HarmonyOS NEXT通过革命性的星核架构(Star Kernel)重构了系统底层架构。本文将深入解析HarmonyOS NEXT的微内核设计原理、系统…...
考研系列-408真题计算机组成原理篇(2015-2019)
写在前面 此文章是本人在备考过程中408真题计算机组成原理部分(2015年-2019年)的易错题及相应的知识点整理,后期复习也常常用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2015年 1.IO端口 接口电路中可以被CPU直接访问的寄存器 IO控制方式-中断…...
HarmonyOS Next 关键资产的解释
关键资产的安全存储与管理:HarmonyOS Asset Store Kit 深度解析 一、关键资产的定义与重要性 关键资产(Critical Asset)是指应用运行过程中涉及的短敏感数据,包括但不限于用户密码、身份令牌(Token)、银行…...
Awesome ChatGPT Prompts:释放AI对话潜力的开源利器
项目概览 Awesome ChatGPT Prompts 是由土耳其开发者 Fatih Kadir Akın 发起的开源项目,托管于 GitHub,旨在通过精心设计的提示词模板(Prompts)优化用户与 ChatGPT 的交互体验。项目以 Markdown 和 CSV 格式管理模板,无需复杂编程语言,但需文本处理能力,目前已在 GitH…...
第6章 C控制语句:循环
目录 6.1 再探while 循环6.2 while语句6.3 比较大小:使用关系运算符和表达式6.4 不确定的循环与计数循环6.5 for循环6.6 更多赋值运算符:、-、*、/和%6.7 逗号运算符6.8 退出条件循环:do while6.9 选择哪种循环6.10 嵌套循环6.11 数组6.12 使…...
海盗王客户端更换横版任务面板的实现
海盗王的任务面板,采用的是竖长设计,上半部分显示任务列表,下半部分显示任务详情。 这样的设计会带来一个问题:就是任务多的时候,不能完整显示,只能显示前面几个,后面的会隐藏到滚动条里面&…...
【git】在Windows上搭建git服务器
1、简述 常用的搭建git服务器的工具有:Gogs、Gitblit、Gitea、GitLab 它们的区别如下: 功能GogsGitblitGiteaGitLab界面语言中文、英文等多语言英文为主中文、英文等多语言英文为主权限管理基础分支权限详细分支权限基础 详细分支权限非常完善代码审查…...
leetcode hot100刷题日记——6.和为 K 的子数组
解答:前缀和思想,见灵茶山艾府大大题解。 (1)前缀和思想: 前缀和数组prefix_sum的定义是prefix_sum[i] nums[0] nums[1] … nums[i]。如果存在两个前缀和prefix_sum[j]和prefix_sum[i]满足prefix_sum[i] - prefi…...
人工智能的“歧视”:“她数据”在算法运行中隐形
纵观人类的发展史,每一次科技进步都将对性别平等产生深刻影响。尤其是当下,人们对于借助人工智能技术快速发展来弥合性别不平等寄予厚望。 但很多人没想过,人工智能技术本身是客观中立、不存在“算法歧视”“性别偏见的吗? 弗吉…...
Java数组列表 - ArrayList
在Java中,ArrayList是一种非常实用的数据结构,它允许开发者动态地管理数组大小。通过ArrayList,可以轻松地添加、删除和修改元素,以及获取元素和列表的大小。例如,创建一个ArrayList来存储字符串,然后通过a…...
跨境外贸电商供应链一体化ERP管理系统
项目介绍: 跨境外贸电商供应链一体化ERP管理系统 高清视频演示: 跨境外贸电商供应链一体化ERP管理系统_哔哩哔哩_bilibili 系统说明: 外贸电商产品ERP系统包含多个角色(客户、客服、工厂、供应商)和多个功能模块,以下是系统功能的详细说明…...
数据库表连接结构详解
数据库表连接结构详解 介绍 本文基于提供的SQL表结构,解释了表之间的连接关系。这些表主要涉及AI系统配置,如客户端、顾问和智能体等。通过外键(如client_id、agent_id),这些表形成关联网络。 表连接概述 以下是主…...
Vue3.0教程005:watch监视ref定义的【基本类型】数据和【对象类型】数据
文章目录 4、watch监视4.1 前言4.2 情况一4.3 情况二 4、watch监视 4.1 前言 作用:监视数据的变化(和vue2中的watch作用一致)特点:Vue3中的watch只能监视以下四种数据: ref定义的数据。reactive定义的数据。函数返回…...
【Java的批量操作】
系列文章目录 Java知识点 文章目录 系列文章目录👉前言👉一、常见批量操作方法👉1-1、JDBC 批量操作(数据库)👉1-2、MyBatis 批量操作👉1-3、Java 8 Stream 批量处理集合👉1-4、多线…...
流复备机断档处理
文章目录 环境症状问题原因解决方案 环境 系统平台:UOS(海光),UOS (飞腾),UOS(鲲鹏),UOS(龙芯),UOS (申威),银河麒麟svs(X86_64&…...
PostgreSQL架构
目录 一、PostgreSQL核心特性与优势 1.PostgreSQL简介 2.PostgreSQL的核心特点 (1)开源与自由 (2)高度符合SQL标准 (3)丰富的数据类型 (4)事务与并发控制 (5&…...
苍穹外卖系统结构与功能报告
一、系统简介 苍穹外卖系统是为餐饮企业定制的数字化解决方案,包含管理端后台和用户端小程序两部分。管理端面向餐饮企业员工,支持菜品、套餐、订单等核心业务的数字化管理;用户端面向消费者,提供在线点餐、支付、订单跟踪等功能…...
CAU数据库class3 关系型数据库基础
关系数据库模型的3个要素 数据结构 二维表 数据操作 特点 操作的对象为元组,操作的结果为元组高度非过程化,用户不关系是怎么实现的 完整性约束 数据完整性是指保证数据真确的特性 实体完整性参照完整性用户定义完整性 关系的形式定义 例子&…...
【Qt】在OrinNX上,使用命令安装qtmultimedia5-dev时报错
1、问题描述 在OrinNX+Ubuntu20.04上,使用命令安装qtmultimedia5-dev时报错 sudo apt install qtmultimedia5-devThe following packages have unmet dependencies: qtmultimedia5-dev : Depends: libpulse-dev but it is not going to be installed E: Unable to correct p…...
阿里云CDN刷新预热--刷新URL
文章目录 一、全英文URL刷新预热二、掺杂中文的URL刷新预热2.1 对带中文URL进行编码2.2 预热刷新 三、CDN刷新-核心作用与价值3.1 核心作用3.2 核心价值3.3 典型使用场景 *最后我想说:请你不要相信我说的每一句话,这只是我的个人经验* 一、全英文URL刷新…...
anaconda、miniconda、conda的关系及miniconda安装
anaconda、miniconda、conda的关系及miniconda安装 文章目录 前言正文定义关系Linux安装miniconda新建一个python3.8环境 参考 前言 本文用于记录关于Anaconda、conda和Miniconda的定义及其关系的总结123: 正文 定义 conda 一个跨平台的开源包管理和环境管理工具…...
SpringBoot实现本地对象存储【minio、阿里云、七牛云】
引入依赖 <!-- minio --> <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.12</version> </dependency><!-- 阿里云oss --> <dependency><groupId>com.aliyun.…...
阿里云百炼(1) : 阿里云百炼应用问答_回答图片问题_方案1_提问时上传图片文件
直接用于拍照答题不大理想, 可能适用其他用途, 更好的方案: 阿里云百炼(1) : 阿里云百炼应用问答_回答图片问题_方案2_提取题目再提问-CSDN博客 1.实现代码 package cn.nordrassil.ly.test.拍照答题;import com.alibaba.dashscope.app.Application; import com.alibaba.dashsc…...
理解阿里云的MQTT
一、阿里云的mqtt分几种 阿里云提供的MQTT服务主要分为标准MQTT协议和P2P模式MQTT两种类型,二者在通信模式及适用场景上有显著差异: 1、标准MQTT与P2P MQTT的区别 特性标准MQTTP2P模式MQTT通信模式发布/订阅(Pub/S…...
HarmonyOS5云服务技术分享--云缓存快速上手指南
大家好,今天我们来聊聊如何快速上手华为AppGallery Connect(AGC)的云缓存服务。作为一款基于Serverless架构的Key-Value型缓存服务,它不仅能自动弹性伸缩,还能免去运维烦恼,非常适合高并发场景下的数据快速…...
FreeSWITCH rtcp-mux 测试
rtcp 跟 rtp 占用同一个端口,这就是 rtcp 复用 Fs 呼出是这样的: originate [rtcp_muxtrue][rtcp_audio_interval_msec5000]user/1001 &echo 需要同时指定 rtcp_audio_interval_msec,否则 rtcp_mux 不能生效 Fs 呼入不需要配置…...
浏览器播放 WebRTC 视频流
源码(vue) <template><video ref"videoElement" class"video" autoplay muted playsinline></video> </template><script setup lang"ts">import { onBeforeUnmount, onMounted, ref } fr…...
SpringBoot3+Vue3(1)-后端 请求头校验,jwt退出登录,mybaits实现数据库用户校验
1.后端:jwt请求头校验 解析 工具类jwtUtils 解析token 令牌是否过期,验证 正常、异常、运行时错误 倒入工具类是resource 工具类中添加解析用户的方法: 在 在工具类添加id解析 此处调用 添加controller做测试 测试&…...
Oracle RAC 中的 RBAL 进程
Oracle RAC 中的 RBAL 进程 RBAL 进程概述 RBAL(ReBalancer)是 Oracle RAC 和 ASM(Automatic Storage Management)环境中的一个关键后台进程,主要负责 ASM 磁盘组的重新平衡操作。 主要功能 磁盘组监控:…...
mac上将 Excel 文件的扩展名从 .xls 改为 .xlsx 后,打开时报错:“文件格式或文件扩展名无效”。
方法一:使用 Excel for Mac 打开并另存为 打开 Excel 应用程序。 打开你的 .xls 文件: 如果 Excel 能正常打开它,说明文件没问题。 在菜单栏点击:文件 → 另存为。 在文件格式中选择:Excel 工作簿 (.xlsx)。 点击保存…...
【算法-栈】深入栈模拟题:从题型特征到实现技巧
算法相关知识点可以通过点击以下链接进行学习一起加油!双指针滑动窗口二分查找前缀和位运算模拟链表哈希表字符串模拟 在算法学习中,栈是最基础也是最容易上手的数据结构之一。然而,当它被用于模拟复杂操作流程时,却常常成为区分“…...
OK536N-C测评:开箱体验以及在Linux下如何管理开发板
前言 OK536N-C终于到我手上了,因为我的主要领域是做嵌入式音视频。例如相机类产品,录像类产品,直播类产品都是我所涉及到的。本片文章一起来开箱见证下OK536N-C有哪些魅力,据说很强。 对于一个嵌入式领域的开发者来说࿰…...
【强化学习】深度强化学习 - Deep Q-Network(DQN)算法
文章目录 摘要一、DQN核心原理1. Q-learning回顾2. 用深度网络逼近Q函数3. 经验回放(Experience Replay)4. 目标网络(Target Network)5. 损失函数6. ε-贪心策略(ε-greedy) 二、算法流程与伪代码三、典型实…...
Python实例题:PyOt实现简易浏览器
目录 Python实例题 题目 代码实现 功能说明 基本浏览功能: 标签页支持: 用户界面: 使用方法 注意事项 Python实例题 题目 PyOt实现简易浏览器 代码实现 import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QT…...