思路:
核心:
for(int i=0;i<l.length();i++)
for(int j=0;j<r.length();j++)
if(l[i] == r[j])
dp[i+1][j+1] = dp[i][j] + 1;
else
dp[i+1][j+1] = max(dp[i+1][j] , dp[i][j+1]);
cout<<dp[l.length()][r.length()]<<endl;
代码:
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 1005;
int dp[maxn][maxn];
void INIT(){
memset(dp , 0 , sizeof(dp));
return ;
}
int main(){
string l,r;
while(cin>>l>>r){
INIT();
for(int i=0;i<l.length();i++)
for(int j=0;j<r.length();j++)
if(l[i] == r[j])
dp[i+1][j+1] = dp[i][j] + 1;
else
dp[i+1][j+1] = max(dp[i+1][j] , dp[i][j+1]);
cout<<dp[l.length()][r.length()]<<endl;
}
return 0;
}