zoukankan      html  css  js  c++  java
  • HDU

    HDU - 5698 瞬间移动 组合数学 思维

    题意

    给一个无限大的方形网络,从((1,1)) 开始跳跃,一次可以跳到右下方的任意一格,问跳到((n,m)) 的方案数。

    分析

    此题如果没有特殊条件跳到任意一格,就是很经典的组合问题:考虑从((1,1)) 走到((n,m)) 会经历(n+m-2) 次移动,其中(C_{n+m-2}^{n-1}) 次往下,就是方案数了。

    但是此题不太一样可以跳跃,因此往下的次数不再是(n-1) 但还是尝试类似的方法:枚举到((n,m))在行上走了(x) 步,在列上也走了(x) 步,那么两者的方案数乘积就是答案了,贡献为(C_{n - 2}^x cdot C_{m-2}^x)

    因此答案

    [ans = sum C_{n-2}^xcdot C_{m-2}^x = sum C_{n-2}^xcdot C_{m-2}^{m-2-x}= C_{n+m-4}^{m-2} ]

    最后一步又叫做范德蒙德卷积

    [sum C_{n}^kcdot C_{m}^{k-i}= C_{n + m}^{k} ]

    代码

    ll fac[maxn], inv[maxn];
    
    void init()
    {
        fac[0] = 1;
        for (int i = 1; i < maxn; i++)
        {
            fac[i] = fac[i - 1] * i % MOD;
        }
    }
    ll Cc(ll x, ll y)
    {
        return fac[x] * ksm(fac[y] * fac[x - y] % MOD, MOD - 2,MOD) % MOD;
    }
    
    
    int main() {
        ll m, n;
        init(); 
        while (~scanf("%lld%lld", &n, &m)) {
            if (m > n) swap(n, m);
            Put(Cc(m + n - 4, n - 2));
            puts("");
        }
    }
    
  • 相关阅读:
    PHP去除所有的空格
    PHP学习之分页类
    PHP学习之验证码类
    PHP学习之迭代生成器
    PHP学习之PHP trait解析
    PHP学习之PHP代码的优化
    PHP学习之PHP的语法糖
    PHP学习之PHP编码习惯
    PHP介绍
    Centos7安装PHP、安装MySQL、安装apache
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13575977.html
Copyright © 2011-2022 走看看