codeforces 163A Substring and Subsequence (dp,最长公共子串变形)

来源:互联网 发布:mac切换中英文输入 编辑:程序博客网 时间:2024/05/17 00:07

题意:

给出两个串,问a的连续子串和b的子串(可以不连续)相同的个数。

题解:

dp[i][j]前i个a的字母和前j个b的字母相同子串个数。


#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<map>using namespace std;typedef long long lld;const int oo=0x3f3f3f3f;const lld OO=1e18;const int Mod=1000000007;const int maxn=5005;lld dp[maxn][maxn];char s1[maxn],s2[maxn];int main(){    int n,m;    lld ans;    while(scanf("%s%s",s1+1,s2+1)!=EOF)    {        n=strlen(s1+1);m=strlen(s2+1);        memset(dp,0,sizeof dp);        for(int i=1;i<=n;i++)        {            for(int j=1;j<=m;j++)            {                if(s1[i]==s2[j])                    dp[i][j]=(dp[i][j]+dp[i][j-1]+dp[i-1][j-1]+1+Mod)%Mod;                else                    dp[i][j]=dp[i][j-1];            }        }        ans=0;        for(int i=1;i<=n;i++)            ans=(ans+dp[i][m]+Mod)%Mod;        printf("%I64d\n",ans);    }    return 0;}




0 0
原创粉丝点击