蓝桥杯 地宫取宝

来源:互联网 发布:java listfiles 排序 编辑:程序博客网 时间:2024/06/11 20:10
#include <iostream>#include <cstring> using namespace std;#define M 1000000007 #define MAX 51 #define MK 13int 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;   }

0 0
原创粉丝点击