POJ 1942 Paths on a Grid

来源:互联网 发布:吉他谱编配软件 编辑:程序博客网 时间:2024/04/30 02:26

题意:一个A*B的矩阵,题问从左下点沿矩阵的边走到右上点有多少种不同的走法,每次只能向右走或者向上走。

 

思路:排列组合计数。

/*每一个点的不同走法的总数,是由左边的点和下边的点的总数之和。*/

/*这就很容易联想到排列组合的一个公式:poj <wbr>1942 <wbr>: <wbr>Paths <wbr>on <wbr>a <wbr>Grid <wbr>(排列组合)其中,n为走到这点所总共经过的边数(不分横边竖边),r可以看为已经走过的横边或者竖边。*/

/*即有n = a + b,r = a 或者 r = b。*/-----借鉴别人的思路

 

Source Code

Problem: 1942 User: imutzcyMemory: 164K Time: 0MSLanguage: C++ Result: Accepted

  • Source Code
    #include<functional>#include<algorithm>#include<iostream>#include<fstream>#include<sstream>#include<iomanip>#include<numeric>#include<cstring>#include<cassert>#include<cstdio>#include<string>#include<vector>#include<bitset>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<list>#include<set>#include<map>using namespace std;typedef long long LL;LL C(LL m,LL n){    if(m>n-m) m=n-m;    LL ans=1,T=m;    while(T--){      ans*=n--;      while(ans%m==0&&m>1)        ans/=m--;    }    return ans;}        int main(){    LL a,b;    while(~scanf("%lld%lld",&a,&b),a+b)      printf("%lld\n",C(a,a+b));    return 0;}