最长的公共子序列自上而下
Longest Common Subsequence top-bottom
本文关键字:自上而下 更新时间:2023-10-16
#include <iostream>
#include <cstring>
using namespace std;
int LCS(string x, string y , int n , int m)
{
int t[n+1][m+1];
for(int i=0;i<=n+1;i++)
for(int j=0;j<=m+1;j++)
{
if(i==0 || j==0)
t[i][j]=0;
}
for(int i=1;i<=n+1;i++)
for(int j=1;j<=m+1;j++)
{
if(x[i-1]==y[j-1])
t[i][j]=1+t[i-1][j-1];
else
t[i][j]=max(t[i-1][j],t[i][j-1]);
}
return t[n][m];
}
int main()
{
string x;
string y;
cin>>x>>y;
LCS(x,y,x.length(),y.length());
return 0;
}
o/p=返回的进程 0 (0x0( 执行时间 : 3.342 s 按任意键继续。
以下代码的 O/P 始终为零。 为什么。 请帮忙。 我做错了什么?
以下代码的 o/p 始终为零
因为你的主要做:
... LCS(x,y,x.length(),y.length()); return 0;
但你想要:
...
return LCS(x,y,x.length(),y.length());
<小时 />出
int t[n+1][m+1];
是一个可变长度数组,请不要使用它们(请参阅为什么可变长度数组不是C++标准的一部分?(,而是在堆中动态分配的数组,因为在编译时大小是未知的,您可以使用std::vector<std::vector<int>>
并例如替换
int t[n+1][m+1]; for(int i=0;i<=n+1;i++) for(int j=0;j<=m+1;j++) { if(i==0 || j==0) t[i][j]=0; }
者
std::vector<std::vector<int>> t(n+1);
for (int i = 0; i <= n; ++i)
t[i].resize(m+1);
顺便说一句,你的循环是错误的,因为正确的测试i<=n
并且到处都是j<=m
相关文章:
- 最小硬币更换问题(自上而下方法)
- 最长的公共子序列自上而下
- 如何从WIC解码器确定自上而下/自下而上?
- 此动态编程问题的自上而下方法
- 不带连续 1 的位字符串,使用自上而下的 DP
- 此解决方案中生成更改的方法数量(自上而下)有什么问题?
- 自上而下的动态规划与递归朴素解决方案.检查运行时执行
- C++自上而下的金字塔
- 自上而下的递归下降解析:依靠尾声优化
- OPENCV是否有一个软件包将3D点转换为2D自上而下的视图
- 用于简单 2D 自上而下的车辆碰撞物理的算法
- 自上而下的编译..当变量相互使用时,在哪里定义变量
- 如何将递归解决方案转换为自下而上或自上而下的解决方案
- 在C++中模拟自上而下添加时出现分段错误
- 自上而下张开树的 makeEmpty() 的时间复杂度
- 自上而下的视角瞄准坦克炮塔用鼠标