二维动态规划2

news/2025/1/8 17:38:40/文章来源:https://www.cnblogs.com/yaoguyuan/p/18660248

[Algo] 二维动态规划2

1. 不同的子序列

// 4. 不同的子序列
// https://leetcode.cn/problems/distinct-subsequences/
long numDistinct(string s, string t) {int n = s.length(), m = t.length();vector<vector<long>> dp(n + 1, vector<long>(m + 1)); // dp[i][j] - s[0...i-1]中包含子序列t[0...j-1]的个数// 状态转移方程 - dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1](s[i - 1] == t[j - 1])for (int i = 0; i <= n; i++) dp[i][0] = 1;for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++)dp[i][j] = (dp[i - 1][j] + (s[i - 1] == t[j - 1] ? dp[i - 1][j - 1] : 0)) % MOD;return dp[n][m];
}
long numDistinct_(string s, string t) {int n = s.length(), m = t.length();vector<long> dp(m + 1);dp[0] = 1;for (int i = 1; i <= n; i++) for (int j = m; j >= 1; j--)if (s[i - 1] == t[j - 1]) dp[j] = (dp[j] + dp[j - 1]) % MOD;return dp[m];
}

2. 编辑距离

// 5. 编辑距离
// https://leetcode.cn/problems/edit-distance/
// 插入一个字符,代价a
// 删除一个字符,代价b
// 替换一个字符,代价c
int MinDistance(string word1, string word2, int a, int b, int c) {int n = word1.length(), m = word2.length();vector<vector<int>> dp(n + 1, vector<int>(m + 1));// 状态转移方程 - (1)word1[i - 1] == word2[j - 1], dp[i][j] = dp[i - 1][j - 1]//              (2)word1[i - 1] != word2[j - 1], dp[i][j] = min(dp[i - 1][j - 1] + c, dp[i][j - 1] + a, dp[i - 1][j] + b)for (int j = 1; j <= m; j++) dp[0][j] = j * a;for (int i = 1; i <= n; i++) dp[i][0] = i * b;for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++)if (word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1];else dp[i][j] = min(min(dp[i - 1][j - 1] + c, dp[i][j - 1] + a), dp[i - 1][j] + b);return dp[n][m];
}

3. 交错字符串

// 6. 交错字符串
// https://leetcode.cn/problems/interleaving-string/
bool isInterleave(string s1, string s2, string s3) {int n = s1.length(), m = s2.length(), k = s3.length();if (n + m != k) return false;vector<vector<bool>> dp(n + 1, vector<bool>(m + 1, false)); // dp[i][j] - s1[0...i-1]与s2[0...j-1]能否拼出s3[0...i+j-1]// 状态转移方程 - (1)s1[i - 1] == s3[i + j - 1], dp[i - 1][j]//              (2)s2[j - 1] == s3[i + j - 1], dp[i][j - 1]dp[0][0] = true;for (int j = 1; j <= m; j++){if (s2[j - 1] != s3[j - 1]) break;dp[0][j] = true;}for (int i = 1; i <= n; i++){if (s1[i - 1] != s3[i - 1]) break;dp[i][0] = true;}for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++)dp[i][j] = (s1[i - 1] == s3[i + j - 1] && dp[i - 1][j]) || (s2[j - 1] == s3[i + j - 1] && dp[i][j - 1]);return dp[n][m];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/865974.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker-compose部署下Fastapi中使用sqlalchemy和Alembic

本篇介绍使用Fastapi + sqlalchemy + alembic 来完成后端服务的数据库管理,并且通过docker-compose来部署后端服务和数据库Mysql。包括:1. 数据库创建,数据库用户创建 2. 数据库服务发现 3. Fastapi 连接数据库 4. Alembic 连接数据库 5. 服务健康检查本篇介绍使用Fastapi +…

误删除了表?PolarDB MySQL帮你恢复!完成就送2025蛇年春联!

由于DDL语句无法回滚,如果误删除了表(例如DROP TABLE),可能会导致数据丢失。PolarDB MySQL提供表回收站的功能,删除的表会被临时转移到表回收站。 通过本次操作,带您体验如何使用PolarDB MySQL提供表回收站的功能,从表回收站恢复误删的表。 完成任务赢奖励,活动火热进行…

《墨香古韵:传统与现代的完美融合》——传世经典的美,划破时空的风格和型

《墨香古韵:传统与现代的完美融合》 由“解锁AI超能”的邦林AIGC出品 一直叹服古人用那样少的笔墨,就可以塑造一个让人无限联想、余味无穷的作品。 而上帝造人,诸多完美,唯独留下一个大大的Bug, 那就是人想象不出自己没见闻过的东西,而有大师也曾说过,人的想象力总是先于…

学习 - Linux - Centos安装jdk8

Centos安装jdk8 安装包下载地址: 通过网盘分享的文件:jdk 链接: https://pan.baidu.com/s/1dQTMZk7foPZhOcw55QM_lQ?pwd=sky1 提取码: sky1 二、上传至Centos系统解压文件并移动到usr/local目录下 解压 tar zxvf jdk-8u181-linux-x64.tar.gz 移动 mv jdk1.8.0_181 /usr/loca…

CICD Day7、Jenkins Pipeline 常用指令及Pipeline快捷生成方式(片段生成器)

1、常用指令 在编写Pipeline脚本时,会涉及各种指令,这些指令用于实现构建过程中的不同功能。熟悉这些指令后,编写一个完整的Pipeline脚本将变得十分简单 1.1 shsh指令用于执行shell命令,配置示例如下stage(Build) {stage {sh hostname} }在上述配置中,在构建的过程中,执行…

DC-6 靶场通关小记

wordpress用户枚举、暴力破解得密码、CVE-2018-15877 plainview_activity_monitor RCE漏洞、水平权限提示、nmap --interative失效时 提权地址 https://www.vulnhub.com/entry/dc-6,315/环境配置 略,有问题可参考 https://www.cnblogs.com/lrui1/p/18655388 需要向hosts文件添…

【Java编程】一个高性能、支持百万级多任务重试框架:Fast-Retry

前言 假设你的系统里有100万个用户,然后你要轮询重试的获取每个用户的身份信息, 如果你还在使用SpringRetry和GuavaRetry 之类的这种单任务的同步重试框架,那你可能到猴年马月也处理不完,即使加再多的机器和线程也是杯水车薪,而Fast-Retry正是为这种场景而生。 Fast-Retry …

mac m1 安装ffmpeg,配置环境变量

1 首先要安装brew 2 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 3 cd ffmpeg 4 执行脚本 ./configure --prefix=/opt/local 5 编译 sudo make ,需要提权,要不系统目录无法创建文件夹 6 安装 make install 7 安装成功,查看 ffmpeg版本 /opt/local/bin/ffmpeg -ve…

如何在 LobeChat 中使用 Ollama

本文介绍了如何在LobeChat中使用Ollama框架运行本地大型语言模型。文章详细说明了在macOS、Windows和Linux操作系统下安装和配置Ollama的步骤,并指导用户如何通过Docker容器部署Ollama。此外,文章还介绍了如何在LobeChat中安装和选择Ollama模型进行对话。Ollama 是一款强大的…

密码综合实战

这种加密本质上是换汤不换药的,我们需要有所创新,下面是我的想法(key{A}和key{B}表示的是A和B独有的秘钥): 假设现在有服务器192.168.1.1,本机扮演角色A,服务器扮演角色B,进行如下逻辑:A拥有A的专属秘钥(汉字秘钥)进行一次加密发送给B,B接受到后再用B的专属秘钥再次加…

FrontEnd性能优化.md

性能优化 性能优化\浏览器渲染原理 Get Started有这样几个问题,我们来思考下:1.我们平常浏览的网页是否是应用?2.在操作系统中的应用是如何运行的3.浏览器究竟是什么4.webkit和浏览器的关系5.浏览器是如何呈现网页的6.经典问题:从浏览器的地址栏输入一个网址直到网页内容呈…