【C/C++】最长公共子序列(LCS)/动态规划
2024-09-06 18:08:40
晴神这个的最巧妙之处,在于用dp[i][0] = dp[0][j] = 0的边界条件
这样从1的下标开始填数组的时候,递推公式dp[i-1][j-1]之类的不会报错
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
string str1, str2;
cin >> str1 >> str2;
int len1 = str1.length(); //i
int len2 = str2.length(); //j
vector<vector<int>> dp;
//根据长度开创一个动态二维数组
//vector的初始化,先全部置零
vector<int> tmp;
tmp.insert(tmp.begin(), len2 + 1, 0);
dp.insert(dp.begin(), len1 + 1, tmp);
//填写第一个
if (str1[0] == str2[0])
{
dp[0][0] = 1;
}
//写状态转移方程
for (int i = 1; i < len1 + 1; i++)
{
for (int j = 1; j < len2 + 1; j++)
{
if(str1[i-1] == str2[j-1])
{
dp[i][j] = dp[i-1][j-1] + 1;
}
else
{
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}
}
}
cout << dp[len1][len2] << endl; //数组下标从0开始,直接输出相当于+1了。
system("pause");
}
最新文章
- StringBuilder(字符串拼接类)
- Openlayers自定义简单popup
- 开发板支持wifi
- java 程序访问hdfs错误 hadoop2.2.0
- Thwarting Buffer Overflow Attacks Stack Randomization
- Recast &; Detour &; TerrainExport Study Feeling
- 简单实例讲解linux的module模块编译步骤
- 图算法之Floyd-Warshall 算法-- 任意两点间最小距离
- 【HDOJ】2102 A计划
- YouTube CEO关于工作和生活平衡的完美回答
- Ubuntu + Django + Nginx + uwsgi
- Git基础教程(一)
- # hadoop入门第六篇:Hive实例
- MSSQL 自定义函数详解
- 看图说话,P2P 分享率 90% 以上的 P2P-CDN 服务,来了!
- python扩展包的升级
- Python 中的map、reduce函数用法
- Linux下Tomcat项目启动报错
- Laravel框架中实现supervisor执行异步进程
- JS调用百度地图API标记地点
热门文章
- 问题 B: 喷水装置(二)(在c++上运行有错误,提交AC了)
- hbuilder中webview调试console.log无法输出日志的问题
- Linux——搭建FTP服务
- loto示波器实践——超声波测距模块
- Nginx的try_files指令使用实例
- SpringBoot数据源相关配置
- 使用pmml实现跨平台部署机器学习模型
- win10的pycharm中安装ansible模块过程
- [cf566C]Logistical Questions
- Study Blazor .NET(二)安装