分类:dp 难度:1
题意:求两字符串的最长公共字串。
a[i]==b[j],dp[i][j] = dp[i-1][j-1]+1,,否则 dp[i][j] = MAX(dp[i-1][j],dp[i][j-1])
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#define MAX(x,y) (x)>(y)?(x):(y)
using namespace std;
const int N=510;
int dp[N][N];
string a,b;
int cal(int i,int j)
{
if(i<0 || j<0) return 0;
if(dp[i][j]>=0) return dp[i][j];
if(a[i]==b[j]) dp[i][j] = cal(i-1,j-1)+1;
else dp[i][j] = MAX(cal(i-1,j),cal(i,j-1));
return dp[i][j];
}
int main()
{
while(cin>>a>>b)
{
memset(dp,-1,sizeof(dp));
int la=a.length(),lb=b.length();
int i,j;
int ans=0;
ans = cal(la-1,lb-1);
printf("%d\n",ans);
}
}