• [CF128C] Games with Rectangle


    [CF128C] Games with Rectangle - 组合

    Description

    一个棋盘上有一个大小为n*m的矩阵,矩阵边缘在棋盘线上.现在你要操作k次,每一次都在上一个画好的矩阵中再画一个矩阵,要求被严格包含,边缘也不能重叠且必须在棋盘线上.问你一共有几种画法.

    Solution

    一种暴力的想法是,设 (f[t][i][j]) 表示走了 t 步,画出 (i imes j) 的矩形的方案数

    发现横向和纵向是相互独立的,所以我们分开来考虑

    (f[i][j]) 表示走了 i 步,长度为 j 的方案数

    行列分别算,然后乘起来即可

    从小往大画和从大往小画是等价的,所以我们考虑从小往大走,这样只需要跑一遍


    仔细想想,其实就是构造一个单调 2-减小的序列,所以本质上是个组合问题

    从 n-1 中选出 2k 个作为线段的端点

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int mod = 1e9 + 7;
    
    int qpow(int p, int q)
    {
        return (q & 1 ? p : 1) * (q ? qpow(p * p % mod, q / 2) : 1) % mod;
    }
    
    int inv(int p)
    {
        return qpow(p, mod - 2);
    }
    
    int fac(int p)
    {
        if (p == 0)
            return 1;
        return p * fac(p - 1) % mod;
    }
    
    int ncr(int n, int r)
    {
        if (r < 0 || r > n)
            return 0;
        return fac(n) * inv(fac(r)) % mod * inv(fac(n - r)) % mod;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int n, m, k;
        cin >> n >> m >> k;
    
        cout << ncr(n - 1, k * 2) * ncr(m - 1, k * 2) % mod << endl;
    }
    
  • 相关阅读:
    集群
    Zabbix分布式监控系统
    构建读写分离的数据库集群
    MySQL主从配置
    常用MySQL操作
    Prometheus Node_exporter 之 Network Netstat ICMP
    Prometheus Node_exporter 之 Network Netstat UDP
    Prometheus Node_exporter 之 Network Netstat TCP Linux MIPs
    Prometheus Node_exporter 之 Network Netstat TCP
    Prometheus Node_exporter 之 Network Netstat
  • 原文地址:https://www.cnblogs.com/mollnn/p/14480137.html
Copyright © 2020-2023  润新知