codeforces 293B

来源:互联网 发布:增值税开票软件安装 编辑:程序博客网 时间:2024/06/05 19:26
#include<bits/stdc++.h>#define N 55#define K 11using namespace std;const int MOD=1e9+7;int jc[K],a[N][N];int cu[N][N][K];int cx[K];int n,m,k,ans,zy;inline int A(int n,int m){long long tmp=1;for(int i=n;i>n-m;i--) tmp*=i;return int(tmp%MOD);}void dfs(int x,int y,int use,int ge){if(x==n){ans+=A(zy,ge);if(ans>=MOD) ans-=MOD;return;}if(y==m){dfs(x+1,0,use,ge);return;}if(a[x][y]){if(cu[x][y][a[x][y]]>2) return;dfs(x,y+1,use,ge);return;}int f=0;for(int c=1;c<=k;c++){if(f&&cx[c]==0) continue;if(!cx[c]) f=1;int fge=0;if(cu[x][y][c]) continue;if(cx[c]==0) fge=1;cx[c]++;for(int i=x;i<n;i++)for(int j=y;j<m;j++)cu[i][j][c]++;dfs(x,y+1,c,ge+fge);for(int i=x;i<n;i++)for(int j=y;j<m;j++)cu[i][j][c]--;cx[c]--;}}int main(){jc[0]=jc[1]=1;for(int i=2;i<=10;i++) jc[i]=jc[i-1]*i;scanf("%d%d%d",&n,&m,&k);if(n+m-1>k){puts("0");exit(0);}zy=k+1;memset(cx,0,sizeof(cx));for(int i=0;i<n;i++)for(int j=0;j<m;j++){scanf("%d",&a[i][j]);if(a[i][j]){for(int x=0;x<=i;x++)for(int y=0;y<=j;y++)cu[x][y][a[i][j]]++;for(int x=i;x<n;x++)for(int y=j;y<m;y++)cu[x][y][a[i][j]]++;}if(!cx[a[i][j]]){zy--;}cx[a[i][j]]=1;}dfs(0,0,0,0);printf("%d\n",ans);return 0;}

原创粉丝点击