题意:求A,B两个字符串,相同的子序列对数,位置不同,就算不同子序列
DP式子看代码
#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
long long dp[1111][1111];
int a[1111];
int b[1111];
int n,m;
int main()
{
memset(dp,0,sizeof dp);
while(scanf("%d%d",&n,&m)!=EOF) {
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=m;i++)
scanf("%d",&b[i]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) {
dp[i][j]=((dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1])%mod+mod)%mod;
if(a[i]==b[j]) {
dp[i][j]=(dp[i][j]+dp[i-1][j-1]+1)%mod;
}
}
printf("%lld\n",dp[n][m]);
}
return 0;
}