本文共 3430 字,大约阅读时间需要 11 分钟。
#include#include #include #include #include const int INF = 0x3f3f3f3f;using namespace std;int n,m,k;int dir[2][2] = { {1,0},{0,1}};int map[51][51];long long ans;void dfs(int x,int y,int t,int mval) { if(t > k) return; if(x == n && y == m){ if(t == k) ++ans; return ; }// if(x+1 <= n){//// if(map[x][y] > m){// dfs(x+1,y,t+1,map[x][y]);// }// dfs(x+1,y,t,m);// }// if(y+1<= m){// if(map[x][y] > m){// dfs(x,y+1,t+1,map[x][y]);// }// dfs(x,y+1,t,m);// } for(int i = 0; i < 2; ++i){ //不同的下一步走法 int nx = x + dir[i][0]; int ny = y + dir[i][1]; if(nx>=1 && nx<=n && ny>=1 && ny<=m){ if(map[nx][ny] > mval){ dfs(nx,ny,t+1,map[nx][ny]); dfs(nx,ny,t,mval); } else{ dfs(nx,ny,t,mval); } } } }int main() { scanf("%d%d%d",&n,&m,&k); ans = 0; for(int i = 1; i <= n; ++i){ for(int j = 1; j <= m; ++j){ scanf("%d",&map[i][j]); } } dfs(1,1,0,-INF);//这里是关键 dfs(1,1,1,map[1][1]); printf("%d\n",ans%1000000007); return 0; }
#includelong long ans;int n,m,k;int a[55][55];const int INF=0x3f3f3f3f;void dfs(int x,int y,int pre,int max){ if(pre>k) return ; if(x==n-1&&y==m-1) { if(pre==k||(pre==k-1&&max max) dfs(x+1,y,pre+1,a[x][y]); dfs(x+1,y,pre,max); } if(y max) dfs(x,y+1,pre+1,a[x][y]); dfs(x,y+1,pre,max); }}int main(){ while(~scanf("%d%d%d",&n,&m,&k)) { for(int i=0; i
#include#include #define M 1000000007using namespace std; typedef long long ll;ll dp[52][52][15][15];ll map[52][52];int n,m,k;int dfs(int x,int y,int num,ll max_val) { if(dp[x][y][num][max_val] != -1) return dp[x][y][num][max_val]; int res = 0; if(x == n-1 && y == m-1){ if(num == k || (num == k-1) && map[x][y] > max_val){ ++res; } return dp[x][y][num][max_val] = res; } if(x+1 < n){ if(map[x][y] > max_val){ res += dfs(x+1,y,num+1,map[x][y]); res %= M; } res += dfs(x+1,y,num,max_val); res %= M; } if(y+1 < m){ if(map[x][y] > max_val){ res += dfs(x,y+1,num+1,map[x][y]); res %= M; } res += dfs(x,y+1,num,max_val); res %= M; } return dp[x][y][num][max_val] = res;//记录当前 x,y,num,max_val下的结果 } int main() { cin >> n >> m >> k; for(int i = 0; i < n; ++i){ for(int j = 0; j < m; ++j){ cin >> map[i][j]; ++map[i][j]; } } memset(dp,-1,sizeof(dp)); ll ans = dfs(0,0,0,0); cout << ans%M; return 0; }
转载地址:http://lqimi.baihongyu.com/