赞
踩
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- using namespace std;
- #define Max(a,b) a>b?a:b
- int dp[1005][1005];
- int a[1005],b[1005];
- const int mod=1000000007;
- int main()
- {
- int n,m;
- while(~scanf("%d%d",&n,&m))
- {
- 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=0;i<=n;i++)
- for(int j=0;j<=m;j++)
- dp[i][j]=0;
- 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];// 可能出现负
- if(a[i]==b[j]) dp[i][j]+=dp[i-1][j-1]+1;
- if(dp[i][j]<0) dp[i][j]+=mod;
- if(dp[i][j]>=mod) dp[i][j]%=mod;
- }
- printf("%d\n",dp[n][m]);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。