提交时间:2025-12-22 19:25:51

运行 ID: 39159

#include<bits/stdc++.h> using namespace std; const int N=350,M=1e6+10,mod=1e9+7; int qp(int a,int b){ int x=1; for(;b;b>>=1,a=1ll*a*a%mod)if(b&1) x=1ll*x*a%mod; return x; } void Add(int &a,int b){a+=b;if(a>=mod) a-=mod;} int f[N][N][N],fac[M],inv[M]; int C(int u,int d){return 1ll*fac[u]*inv[d]%mod*inv[u-d]%mod;} int n,m; int main(){ //freopen("life.in","r",stdin); //freopen("life.out","w",stdout); cin>>n>>m; int lm=max(n,m); fac[0]=1;for(int i=1;i<=lm;i++) fac[i]=1ll*fac[i-1]*i%mod; inv[lm]=qp(fac[lm],mod-2);for(int i=lm-1;i>=0;i--) inv[i]=1ll*inv[i+1]*(i+1)%mod; f[0][0][0]=1; for(int i=1;i<=min(n,2*m);i++){ for(int j=0;j<=min(i,m);j++){ for(int k=0;k<=min(j,m);k++){ Add(f[i][j+1][k+1],f[i-1][j][k]); for(int x=1;x<=k-1;x++){ Add(f[i][j][x],f[i-1][j][k]); } } } /*for(int j=0;j<=m;j++){ for(int k=0;k<=m;k++){ cout<<i<<' '<<j<<' '<<k<<' '<<f[i][j][k]<<endl; } }*/ }//cout<<endl; int ans=0; for(int i=0;i<=min(n,2*m);i++){ for(int j=0;j<=min(n,m);j++){ int val=1ll*C(m,j)*C(n-1,i-1)%mod*fac[j]%mod; int sum=0; for(int k=0;k<=m;k++) Add(sum,f[i][j][k]); //cout<<i<<' '<<j<<' '<<val<<' '<<sum<<endl; Add(ans,1ll*val*sum%mod); } }cout<<ans<<endl; return 0; }