这题我最开始用来实现第一个功能(求最长公共子序列)的代码是这样的:
#include <iostream>
using namespace std;
int dp[5005][5005];
signed main()
{
string x, y;
int lenx, leny;
getline(cin, x);
getline(cin, y);
x = x.substr(0, x.size()-1);
lenx = x.size();
x = ' ' + x;
y = y.substr(0, y.size()-1);
leny = y.size();
y = ' ' + y;
for (int i = 1; i <= lenx; i++)
{
for (int j = 1; j <= leny; j++)
{
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
if (x[i] == y[j])
{
dp[i][j] = max(dp[i][j], dp[i-1][j-1]+1);
}
}
}
cout << dp[lenx][leny];
return 0;
}
结果发现不知道为什么x会保留了句号,但是y不会。有没有大佬教一教本蒟蒻这是什么原理?