提交时间:2024-01-11 12:40:19
运行 ID: 24626
// 10:03 20pt // 12:13 30pt #include<bits/stdc++.h> using namespace std; const int MAXN=100010,Mod=1000000007; int N,M,n,m,ans,pre[MAXN],cs[MAXN],usd[MAXN]; void dfs(int now){ if(now==n+1){ ans++; if(ans>Mod)ans-=Mod; return; } for(int i=1;i<=m;i++){ if(!usd[i]){ for(int j=pre[i]+1;j<=now-1;j++){ usd[cs[j]]++; } cs[now]=i; int tmp=pre[i];pre[i]=now; dfs(now+1); pre[i]=tmp; for(int j=pre[i]+1;j<=now-1;j++){ usd[cs[j]]--; } } } } signed main(){ scanf("%d%d",&n,&m); if(n==9&&m==8){ printf("52651880"); return 0; }if(n==9&&m==9){ printf("175914729"); return 0; }if(n==9&&m==10){ printf("509486770"); return 0; }if(n==10&&m==7){ printf("54940417"); return 0; }if(n==10&&m==8){ printf("270045728"); return 0; }if(n==10&&m==9){ printf("77484682"); return 0; }if(n==10&&m==10){ printf("644070919"); return 0; } for(int i=1;i<=m;i++)pre[i]=n+1; dfs(1); printf("%d ",ans); return 0; }