zoukankan      html  css  js  c++  java
  • POJ 1942 Paths on a Grid(组合数)

    http://poj.org/problem?id=1942

    题意 :在一个n*m的矩形上有n*m个网格,从左下角的网格划到右上角的网格,沿着边画,只能向上或向右走,问有多少条不重复的路 。

    思路 :这种问题记得高中的时候就做过,学组合数的时候讲的,反正就是向上向右走,加起来要走的路必定为n+m条,选择n条向上,必定剩下的m为向右的,所以这个题就转化求C(n,m+n),或者是C(m,m+n),不过个人建议用m,n中小的那个数去做,因为省时。因为这个数据较大,所以求组合的时候就要注意以防超时,如果还像1850那样用杨辉三角就容易超时了,就要用另一种方法去求组合数,我以前整理过4种求组合数的方法,正好第四种这里可以用,拆分相除,逐项相乘。

    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    #include <iomanip>
    
    using namespace std ;
    
    double com(unsigned n,unsigned m)
    {
        unsigned a = m+n ;
        unsigned b = min(m,n) ;
        double comm = 1.0 ;
        while(b > 0)
        comm *= (double)(a--)/(double)(b--) ;
        return comm ;
    }
    
    int main()
    {
        unsigned m,n ;
        while(scanf("%d %d",&m,&n)&&(m||n))
        {
            cout<<fixed<<setprecision(0)<<com(n,m)<<endl ;
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    C#:foreach语句,yield语句
    C#:委托
    C#:事件
    fckeditor 添加上传附件功能
    电话号码 正则表达式
    设为首页,和加入收藏js代码
    sql中判断时间,精确到秒
    js 日期 星期
    那些惊艳的句子!
    .net 动态页面生成静态页面
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3438198.html
Copyright © 2011-2022 走看看