题意:求a串的子串与b串的子序列有多少个相匹配,mod=1e9+7;
思路:类似于LCS,如果会LCS的话就很容易(但是我没想通LCS的方程是怎么的来的)
代码:
#include <bits/stdc++.h> using namespace std; const int maxn=5005; const int MOD=1e9+7; char a[maxn],b[maxn]; int dp[maxn][maxn]; int main() { while(~scanf("%s%s",a+1,b+1)){ int lena=strlen(a+1); int lenb=strlen(b+1); memset(dp,0,sizeof(dp)); long long ans=0; for(int i=1;i<=lena;i++){ for(int j=1;j<=lenb;j++){ if(a[i]==b[j])dp[i][j]=(dp[i][j]+dp[i-1][j-1]+1)%MOD; dp[i][j]=(dp[i][j]+dp[i][j-1])%MOD; } ans=(ans+dp[i][lenb])%MOD; } printf("%lld\n",ans); } return 0; }