首页 > 其他分享 >AT_dp_y Grid 2 题解

AT_dp_y Grid 2 题解

时间:2024-07-03 21:09:31浏览次数:12  
标签:格子 题解 ll long Grid define inv dp jc

题目传送门

前置知识

计数 DP | 排列组合

解法

正难则反,考虑求出总方案数和至少经过一个黑色格子的方案数,二者作差即为所求。

强制增加一个黑色格子 \((h,w)\),使得存在一条至少经过一个黑色格子的路径。

如果没有“不能移动到黑色格子中”的限制,那么就是一个简单的格路计数问题,方案数为 \(\dbinom{h+w-2}{h-1}\)。

对黑色格子以行坐标为第一关键字,列坐标为第二关键字升序排序。

设 \(f_{i}\) 表示从左上角到排序后的第 \(i\) 个黑色格子的方案数,状态转移方程为 \(f_{i}=\dbinom{x_{i}+y_{i}-2}{x_{i}-1}-\sum\limits_{j=1}^{i-1}[x_{i} \ge x_{j}] \times [y_{i} \ge y_{j}] \times f_{j} \times \dbinom{x_{i}-x_{j}+y_{i}-y_{j}}{x_{i}-x_{j}}\)。

最终,有 \(f_{n+1}\) 即为所求。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
const ll p=1000000007;
ll f[3010],inv[200010],jc[200010],jc_inv[200010];
pair<ll,ll>a[3010];
ll C(ll n,ll m,ll p)
{
    return (n>=m&&n>=0&&m>=0)?(jc[n]*jc_inv[m]%p)*jc_inv[n-m]%p:0;
}
int main()
{
    ll h,w,n,i,j;  
    cin>>h>>w>>n;
    inv[1]=1;
    jc[0]=jc_inv[0]=jc[1]=jc_inv[1]=1;
    for(i=2;i<=h+w-2;i++)
    {
        inv[i]=(p-p/i)*inv[p%i]%p;
        jc[i]=jc[i-1]*i%p;
        jc_inv[i]=jc_inv[i-1]*inv[i]%p;
    }
    for(i=1;i<=n;i++)
    {
        cin>>a[i].first>>a[i].second;
    }
    n++;
    a[n]=make_pair(h,w);
    sort(a+1,a+1+n);
    for(i=1;i<=n+1;i++)
    {
        f[i]=C(a[i].first+a[i].second-2,a[i].first-1,p);
        for(j=1;j<=i-1;j++)
        {
            if(a[j].first<=a[i].first&&a[j].second<=a[i].second)
            {
                f[i]=(f[i]-f[j]*C(a[i].first-a[j].first+a[i].second-a[j].second,a[i].first-a[j].first,p)%p+p)%p;
            }
        }
    }
    cout<<f[n]<<endl;
    return 0;
}

后记

多倍经验:CF559C Gerald and Giant Chess

标签:格子,题解,ll,long,Grid,define,inv,dp,jc
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18282553

相关文章

  • 7.1 lxl DS Day1 题解
    7.1lxlDSDay1题解P7124[Ynoi2008]stcm性质1:考虑轻儿子的子树和为\(O(nlogn)\)。证明:考虑每个结点会对多少个轻祖先做贡献,也就是重链个数,考虑每个节点到根节点重链条数为\(O(nlogn)\),所以子树和为\(O(nlogn)\)。所以对于一条重链,如果我们已经插入了链头的补集,......
  • MySQL在本机环境安装过程及问题解决
    最近在我的Windows10电脑上搭建MySQL数据库环境,没想到居然遇到了不少问题,特记录下来,希望给大家帮助,少走弯路。下载MySQLCommunityServer https://dev.mysql.com/downloads/mysql/ MySQLCommunityServeristheworld'smostpopularopensourcedatabase.这个社区......
  • 基于GWO灰狼优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):     2.算法涉及理论知识概要       LDPC码是一种线性错误修正码,以其接近香农极限的优良性能而被广泛应用于现代通信系统中。NMS译码是一种基于最小平方误差准则的软判决译码方法,其目标是找到一......
  • P10218 [省选联考 2024] 魔法手杖 题解
    题目描述:给定序列\(a_1,\cdots,a_n\)和\(b_1,\cdots,b_n\),满足\(a_i\in[0,2^k-1],b_i\ge0\),你需要给出\(S\subseteq\{1,\cdots,n\}\)和\(x\in[0,2^k-1]\)满足:\(\sum\limits_{i\inS}b_i\lem\)。最大化\(val(S,x)=\min\big(\min\limits_{i\inS......
  • 蓝桥 第 3 场 算法季度赛 前5题题解,剩下的后续发上去补上
    第1题全国科普行动日【算法赛】题目传送门直接输出就行,没多大操作可言:#include<iostream>usingnamespacestd;intmain(){cout<<"6.29";return0;}第2题 A%B【算法赛】题目传送门题目有点小坑,因为也可能是负数,所以需要特判一下,上代码就可以看懂了:#include......
  • CF 1981 D. World is Mine (*1800) DP+博弈论
    CF1981D.WorldisMine(*1800)DP+博弈论题目链接题意:有\(n\)个蛋糕,每个蛋糕有一个美味值\(a_i\),\(Alice\)和\(Bob\)轮流吃蛋糕,\(Alice\)每次必须选择吃严格大于之前所吃的蛋糕美味程度。\(Bob\)随意选择。有人没有蛋糕可以吃时,游戏结束。\(Alice\)想吃更多......
  • python编写使用xmlrpc上传wordpress网站文章的程序
    1、安装库        pipinstallpython-wordpress-xmlrpc,tkinter,xmlrpc,json2、发布文章url="http://域名/xmlrpc.php"username=用户名password=密码title=标题content=内容tags=标签categories=分类client=C......
  • 流固耦合可能遇到的问题解决办法
    (纯私人经验)双向流固耦合中出现的一些问题及解决方法:1.出现负网格,可以加密网格,可以去提升网格质量,六面体网格尽量用icemcfd画,四面体就用自带的完全可以,可以增加刚度降低变形量从而消除负网格,可以调整弹簧光顺参数,一般经验取值一个0.6一个0.5,可以缩小时间步长,还可以在fluent......
  • Profibus DP主站转Modbus网关连接伺服与电机通讯
    ProfibusDP主站转Modbus网关连接伺服与电机通讯在工业自动化领域,将ProfibusDP主站转Modbus网关(XD-MDPBM20)用于连接伺服与电机通讯是一种常见且重要的应用方式。当使用ProfibusDP主站转Modbus网关(XD-MDPBM20)连接伺服与电机进行通讯时,可以参考以下步骤进行配置和操作:1.什么是Pro......
  • 洛谷 P5723 【深基4.例13】质数口袋 题解
    题面传送门观察题目,我们可以看到这是一道朴素的,判断质数的一道题目。何为质数?质数就是除了111和这个本身,没有其他因数的数。特别的,......