• 机器人走方格 V2 51Nod


    题意:

    (M imes N) 的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出 (Mod 10^9+7)的结果。

    分析:

    这是一个可重集合的排列问题。有两种不同类型的对象,个数分别为:
    (R)(n-1)
    (D)(m-1)
    由公式:

    [ans=frac{n!}{n_1!*n_2!*...*n_k!} ]

    所以最终结果为:

    [ans=frac{(n+m-2)!}{(n-1)!*(m-1)!}=frac{(n+m-2)*..*m}{(n-1)*...*1} ]

    利用费马小定理求逆元,结果乘法的性质,即可求出 ((n-1)!) 的逆元。

    此外,如果不用公式。方案的种类数取决于 (D) 的出现位置,有 (C(n+m-2,m-1)) 种可能,和上面的结果一样。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int mod=1e9+7;
    ll power(ll a,ll b)
    {
        ll res=1;
        while(b)
        {
            if(b&1)
                res=res*a%mod;
            a=a*a%mod;
            b>>=1;
        }
        return res%mod;
    }
    int main()
    {
        ll m,n,res=1,d=1;
        scanf("%lld%lld",&m,&n);
        for(ll i=m;i<=n+m-2;i++)
            res=res*i%mod;
        for(ll i=1;i<n;i++)
        {
            ll t=power(i,mod-2);
            d=t*d%mod;
        }
        printf("%lld
    ",res*d%mod);
        return 0;
    }
    
    
  • 相关阅读:
    学期总结
    Sprint 2(第一天)
    学期总结
    实验四、主存空间的分配和回收
    阅读《构建之法》与链接有感.
    《构建之法》八、九、十章读后感
    Scrum领取任务
    实验三、进程调度模拟程序实验
    《构建之法》6-7章读后感
    实验二 作业调度模拟程序
  • 原文地址:https://www.cnblogs.com/1024-xzx/p/12641245.html
Copyright © 2020-2023  润新知