题目:A,B两个序列相同的子序列个数
#include <bits/stdc++.h>
using namespace std;
#define maxn 1000+40
#define mod 1000000007
typedef long long int LL;
int n , m;
LL dp[maxn][maxn];
int a[maxn];
int b[maxn];
int main()
{
while( cin >> n >> m )
{
memset(dp,0,sizeof(dp));
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)
{
if( a[i] == b[j] )
{
dp[i][j] = dp[i-1][j] + dp[i][j-1] + 1;
}
else dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1];
dp[i][j] %= mod;
}
}
cout << (dp[n][m] + mod)%mod << endl;
}
}