1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; const int N = 55; int MOD=1000000007; int n,m,k; int w[N][N]; int f[N][N][13][14];
int main() {
cin>>n>>m>>k; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>w[i][j]; w[i][j]++; } f[1][1][1][w[1][1]]=1; f[1][1][0][0]=1; for(int i = 1; i <= n; i ++ ) for(int j= 1; j <= m; j ++ ) {if(i==1||j==1) continue; for(int u = 0;u<= k; u ++ ) for(int v = 0; v <= 13; v ++ ) { int &val=f[i][j][u][v]; val=(val+f[i-1][j][u][v]) val=(val+f[i][j-1][u][v]) if(u>0&&v==w[i][j]) { for(int c=0;c<v;c++) { val=(val+f[i-1][j][u-1][c]) val=(val+f[i][j-1][u-1][c] } } } }
int res=0; for (int i = 0; i < 13; i ++ ) res=(res+f[n][m][k][i]) cout<<res;
return 0; }
|