就是板子,没什么可说的,我就再来回顾一下,看有什么新收获,所谓dp,就是带入前面数据的分段处理
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=
1000+
10;
int dp[maxn][maxn];
string a,b;
int main()
{
while(cin >> a >>
b)
{
memset(dp,0,
sizeof(dp));
for(
int i=
0;i<a.length();i++
)
for(
int j=
0;j<b.length();j++
)
{
if(a[i]==b[j]) dp[i+
1][j+
1]=dp[i][j]+
1;
//这里的dp[i+1][j+1]对应a[i]和b[i],不用dp[i][j]对应,因为不存在dp[-1][-1]=0
else dp[i+
1][j+
1]=max(dp[i+
1][j],dp[i][j+
1]);
}
printf("%d\n",dp[a.length()][b.length()]);
}
return 0;
}
转载于:https://www.cnblogs.com/Wangwanxiang/p/7358577.html