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("");
        }
    }
    
  • 相关阅读:
    WordPress让文本小工具支持简码
    修改WordPress后台登录地址,提高安全性
    WordPress用键盘左右方向键来查看上一篇和下一篇文章
    Git 补丁操作
    Git 标签操作
    Git 修正错误
    Git 删除操作
    Git 重命名操作
    Git 移动操作
    Git 藏匿操作
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13575977.html
Copyright © 2011-2022 走看看