我有一个非常简单的代码来查找LCS。问题不在于算法,而是其他。在for循环中获取最后一个输入后,代码停止工作。
我试图找出为什么会发生这种情况,并看到当我注释掉我的LCS_string函数时,代码可以正常运行。但是,这行代码是在打印完之后的,所以我不知道它如何或为什么会影响打印。
vector<int> str1, str2;
vector<vector<int> > dp;
stack<int> s;
int LCS(int a, int b){
if(dp[a][b] != -1){
return dp[a][b];
}
if(a == 0 || b == 0){
dp[a][b] = 0;
return dp[a][b];
}
if(str1[a-1] == str2[b-1]){
dp[a][b] = LCS(a-1, b-1) + 1;
return dp[a][b];
}
dp[a][b] = max( LCS(a-1, b), LCS(a, b-1) );
return dp[a][b];
}
void LCS_string(int a, int b){
cout << "in lcs_string with: " << a << " " << b << endl;
if(dp[a][b] > dp[a-1][b] && dp[a][b] > dp[a][b-1]){
s.push( str1[a-1] );//could also be y[b] as they are the same element
LCS_string(a-1, b-1);
return;
}
if(dp[a-1][b] > dp[a][b-1]){
LCS_string(a-1, b);
return;
}
else{
LCS_string(a, b-1);
return;
}
}
int main(){
int n, m;
cin >> n >> m;
int temp;
for(int i = 0; i < n; i++){
cin >> temp;
str1.push_back(temp);
}
for(int i = 0; i < m; i++){
cin >> temp;
cout << i;
str2.push_back(temp);
cout << "done" << endl;//doesnt print anything when i == m-1
}
cout << "end of inputting" << endl;//is not outputted
dp.resize( n + 1, vector<int>( m + 1, -1 ) );
LCS( n, m );
LCS_string(n, m);//when this line is commented out, the code works
while(!s.empty()){
cout << s.top();
s.pop();
}
}
我没有收到任何错误消息,或者程序终止,没有给出任何输出。