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
  • 相关阅读:
    SQLQuery实现动态表映射
    Hibernate Criteria查询
    关于短延迟 SLEEP USLEEP NANOSLEEP SELECT
    FFmpeg技术资料
    container_of()
    AES加解密算法的模式介绍
    无线AES与TKIP
    妻子1.0
    VLC简介及使用说明
    虚拟机中BusLogic与LSILogic的区别与分析
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3438198.html
Copyright © 2011-2022 走看看