#include <iostream>
#include <cstring>
using namespace std;
#define M 1000000007
#define MAX 51
#define MK 13
int val[MAX][MAX];
int dp[MAX][MAX][MK][MK];
int n,m,k;
int dfs(int i,int j,int s,int v)
{
if (dp[i][j][s][v]>=0)
{
return dp[i][j][s][v];
}
if (i==n&&j==m)
{
if (s==k)
{
dp[i][j][s][v]=1;
return dp[i][j][s][v];
}else if (s==k-1&&v<val[i][j])
{
dp[i][j][s][v]=1;
return dp[i][j][s][v];
}else{
dp[i][j][s][v]=0;
return dp[i][j][s][v];
}
}
int t=0;
if (i!=n)
{
if (v<val[i][j]){
t=dfs(i+1,j,s+1,val[i][j]);
}
t=(t+dfs(i+1,j,s,v))%M;
}
if (j!=m)
{
if (v<val[i][j]){
t=(t+dfs(i,j+1,s+1,val[i][j]))%M;
}
t=(t+dfs(i,j+1,s,v))%M;
}
dp[i][j][s][v]=t;
return dp[i][j][s][v];
}
int main()
{
memset(dp,-1,sizeof(dp));
cin>>n>>m>>k;
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
cin>>val[i][j];
val[i][j]+=1;
}
}
cout<<dfs(1,1,0,0)<<endl;
return 0;
}
蓝桥杯 地宫取宝
最新推荐文章于 2022-03-30 12:14:22 发布