假定坐标系中,从点(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 
Posted on 2009-06-18 17:37 Liu 阅读(236) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理