#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int lcs[2005][2005];
int dp[2005][2005];
int main()
{
char str1[2005],str2[2005];
scanf("%s%s",str1+1,str2+1);
int length1=strlen(str1+1);
int length2=strlen(str2+1);
int i,j;
for (i=0;i<=length1;i++)
{
lcs[i][0]=0;
dp[i][0]=1;
}
for (i=0;i<=length2;i++)
{
lcs[0][i]=0;
dp[0][i]=1;
}
for (i=1;i<=length1;i++)
for (j=1;j<=length2;j++)
{
if (str1[i]==str2[j])
{
lcs[i][j]=lcs[i-1][j-1]+1;
dp[i][j]=dp[i-1][j-1];
}
else if (lcs[i-1][j]>lcs[i][j-1])
{
lcs[i][j]=lcs[i-1][j];
dp[i][j]=dp[i-1][j];
}
else if (lcs[i-1][j]<lcs[i][j-1])
{
lcs[i][j]=lcs[i][j-1];
dp[i][j]=dp[i][j-1];
}
else
{
lcs[i][j]=lcs[i][j-1];
dp[i][j]=(dp[i-1][j]+dp[i][j-1])%1000000007;
}
}
printf("%d\n",dp[length1][length2]);
}
Ural1577(DP)
最新推荐文章于 2018-06-23 08:37:17 发布