给定一个M*N的格子或棋盘,从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)
来源:互联网 发布:巨人网络 董事局 编辑:程序博客网 时间:2024/05/21 17:35
解法1:我们可以把棋盘的左下角看做二维坐标的原点(0,0),把棋盘的右上角看做二维坐标(M,N)(坐标系的单位长度为小方格的变长)
用f(i,j)表示移动到坐标f(i,j)的走法总数,其中0=<i,j<=n,设f(m,n)代表从坐标(0,0)到坐标(m,n)的移动方法,则
f(m,n)=f(m-1,n)+f(m,n-1).
于是状态f(i,j)的状态转移方程为:
f(i,j)=f(i-1,j)+f(i,j-1) if i,j>0
f(i,j)=f(i,j-1) if i=0
f(i,j)=f(i-1,j) if j=0
初始情况就为:f(0,0)=0, f(0,1)=1, f(1,0)=1,这个问题可以在时间O(n^2),空间O(n^2)内求解,非递归解.
/*
递归解
*/
int process(int m, int n) { if (m == 0 && n == 0) return 0; if (m==0 || n==0) return 1; return process(m, n - 1) + process(m - 1, n);}
/*
非递归解
*/
int processNew(int m,int n){ int **Q=new int*[m+1]; for(int i=0; i<=m; ++i){ Q[i]=new int[n+1](); } //初始化 Q[0][0]=0; for(int j=1; j<=n; ++j) Q[0][j]=1; for(int i=1; i<=m; ++i) Q[i][0]=1; //迭代计算 for(int i=1; i<=m; ++i){ for(int j=1; j<=n; ++j){ Q[i][j]=Q[i-1][j]+Q[i][j-1]; } } int res=Q[m][n]; delete [] Q; return res;}
就是C(M+N, M),或者C(M+N, N)。
- 给定一个M*N的格子或棋盘,从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)
- m*n的方格,从左下角走到右上角,只能向右和向上,总共的路径
- 一个M * N的方格,从左下角走到右上角有多少种走法?
- 算法--美团--给出m*n个格子,每次只能右走一步或下走一步,打印出所有的路径
- 一个N*M的棋盘,右下方有一个棋子,两人轮流走,可以走到上下左右相邻的未走过的格子,不能走则输,谁胜?
- 给定一个充满非负数的网格,找到从左上到右下的路径,最小化沿其路径的所有数字的总和。只能向下或向右移动。
- 现有一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子
- Project Euler15 给定一个20*20的方格,从左上角到右下角的路径有多少条?(只允许向右和向下走)
- 3*4的网状方格从左下角走到右上角的最短路线的条数
- 有一个X*Y的网格,只能向右、向下移动,从(0, 0)走到(X-1, Y-1),中间某些位置有障碍物,打印一条路径(
- 经典问题:对于一个m*n的网格,从左上角的方格到右下角的方格,共有多少条路径(只允许向右和向下)
- 在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。
- 在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。
- 有一个X*Y的网格,只能向右、向下移动,从(0, 0)走到(X-1, Y-1),中间某些位置有障碍物,打印一条路径(优化)
- 搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
- 搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
- 搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
- 搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
- 左连接、右连接、交叉连接、全外连接
- Drawable、Bitmap、Canvas和Paint的区别
- centos 安装eclipse编写C/C++程序
- Matlab uicontrol举
- 构成直角三角形
- 给定一个M*N的格子或棋盘,从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)
- ACM STEP 1.1.7 A+B for Input-Output Practice (VII)
- C#大学教程/国外经典教材(奋斗的小鸟)_PDF 电子书
- Passing Managed Structures With Arrays To Unmanaged Code Part 1
- 拓扑排序 练习
- ACM STEP 1.1.8 A+B for Input-Output Practice (VIII)
- hdu3861 The King’s Problem (强连通+最小路径覆盖)
- Android ListView BaseAdapter的理解
- ACM STEP 1.2.1 Climbing Worm