题意
两个长度为
n
的字符串,可以使用种类为
分析
考虑
dp[i][j]
表示长度为
i
的字符串使用恰好
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define LL long long
#define MAXN 2020
const int mod=1e9+7;
LL pm[MAXN][MAXN];
LL dp[MAXN][MAXN];
int main(){
for(int i=1;i<MAXN;++i){
pm[i][0]=1;
for(int j=1;j<MAXN;++j)
pm[i][j]=(pm[i][j-1]*i)%mod;
}
int T,n,m;
cin>>T;
while(T--){
scanf("%d %d",&n,&m);
dp[0][0]=1;
for(int i=1;i<=n;++i)
for(int j=1;j<m;++j)
dp[i][j]=((m-j+1)*dp[i-1][j-1]+j*dp[i-1][j])%mod;
LL ans=0;
for(int i=1;i<m;++i)
ans=(ans+dp[n][i]*pm[m-i][n])%mod;
printf("%I64d\n",ans);
}
}