记忆化搜索
#include <bits/stdc++.h>
using namespace std;
int n,m,k,f[55][55],dp[55][55][55][55];
long long ans;
long long dfs(int x,int y,int nm,int t)
{
if(x>n||y>m)return 0;
if(dp[x][y][nm][t]!=-1)return dp[x][y][nm][t];
if(x==n&&y==m)
{
if(t==k||(t+1==k&&f[x][y]>nm))
{
return 1;
}
return 0;
}
long long res=0;
if(nm<f[x][y])
{
res+=dfs(x,y+1,f[x][y],t+1);
res+=dfs(x+1,y,f[x][y],t+1);
}
res+=dfs(x,y+1,nm,t);
res+=dfs(x+1,y,nm,t);
dp[x][y][nm][t]=res%1000000007;
return res%1000000007;
}
int main()
{
cin>>n>>m>>k;
memset(dp, -1, sizeof(dp));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>f[i][j];
}
}
cout<<dfs(1,1,-1,0);
}
0 回复
0 转发
0 喜欢
17 阅读



