C++ 代码
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;
typedef pair<int,int> P;
#define pi 3.141592653589793238
int mov[4][2]= {{-1,0},{0,1},{1,0},{0,-1}};
int month[13]= {0,31,0,31,30,31,30,31,31,30,31,30,31};
const int N=100100;
const int M=1000000007;
int dp[51][51][15][15];
int arr[51][51];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,m,k;
while(cin>>n>>m>>k){
memset(dp,0,sizeof(dp));
int C=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>arr[i][j];
C=max(C,arr[i][j]);
}
}
dp[1][1][arr[1][1]][1]=1;
dp[1][1][0][0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int c=arr[i][j];
for(int p=0;p<=C;p++){
for(int q=0;q<=k;q++){
dp[i][j][p][q]=((dp[i][j][p][q]+dp[i-1][j][p][q])%M+dp[i][j-1][p][q])%M;
}
}
for(int p=0;p<c;p++){
for(int q=1;q<=k;q++){
dp[i][j][c][q]=((dp[i][j][c][q]+dp[i-1][j][p][q-1])%M+dp[i][j-1][p][q-1])%M;
}
}
if(c==0){
dp[i][j][0][1]=((dp[i][j][0][1]+dp[i-1][j][0][0])%M+dp[i][j-1][0][0])%M;
}
}
}
ll res=0;
for(int i=0;i<=C;i++){
res=(res+dp[n][m][i][k])%M;
}
cout<<res<<endl;
}
return 0;
}