#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始终为零。 idk为什么。请帮忙。我在做什么错?
答案 0 :(得分:0)
以下代码的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];
是可变长度的数组,请不要使用它们(请参阅Why aren't variable-length arrays part of the C++ standard?),而是在堆中动态分配数组,因为在编译时不知道大小,因此可以使用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