Cout из строк 21 и 24 по-разному выводит на терминал, но я никогда не говорил коду для доступа к c [i] [0], кроме строки 20, соответствующей строке 3 и строке 4 на терминале.
Используйте ампутацию и шлепки в качестве входных данных. Не спрашивайте, почему.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int m,n;
string X;
string Y;
int main(){
cin>>X>>Y;
m = X.size();
n = Y.size();
int c[m+1][n+1];
for(int j = 0; j <= m; j++){
c[0][j] = 0;
}
for (int i = 1; i <= n; i++){
c[i][0] = 0;
cout << c[i][0] ; (line 21)
}
cout<< endl ;
for(int i = 1; i <= n; i++){
cout << c[i][0] ; (line 24)
for (int j = 1; j <= m; j++){
if (Y.at(i-1) == X.at(j-1)){
c[i][j] = c[i-1][j-1] + 1;
}
else{
c[i][j] = max(c[i][j-1], c[i-1][j]);
}
}
}
cout<< endl ;
for(int i = 0 ; i<=n; i++){
for(int j = 0 ; j<=m; j++){
cout << c[i][j] << " ";
}
cout << endl;
}
}