假定坐标系中,从点(0,0) 到 点 (m,n),只能上行或者右行,则可以到达的路径总数是多少?
每次只能移动一个单位
解法一:
组合数学的多重集合排列问题,设上行一个单位为 x,右行一个单位为y,则到达(m,n)点
的一条路径,对应于{m*x, n*y}的一个全排列。根据全排列公式,可有
(m+n)!
__________ = C(m+n, m)
m! n!
解法二:
将问题转化为DP问题,即 设 F(x,y)表示到达(x,y)的路径总数,则有
F(x,y) = F(x-1,y) + F(x, y-1);
其中有F(0,j) = 1, F(i, 0) = 1, i = 1...x; j = 1.....y
代码如下:以 (9,9)点为列子
1 # include <iostream>
2
3 using namespace std;
4 int F(int x, int y) {
5 if ( x == 0 || y == 0)
6 return 1;
7 else
8 return F(x-1,y) + F(x,y-1);
9 }
10 int main() {
11 cout<<F(9,9)<<endl;
12 }
13