牛客网 暑期ACM多校训练营(第一场)A.Monotonic Matrix-矩阵转化为格子路径的非降路径计数,Lindström-Gessel-Viennot引理-组合数学

这个题就是给你一个n*m的矩阵,往里面填{0,1,2}这三种数,要求是Ai,j⩽Ai+1,j,Ai,j⩽Ai,j+1 ,问你一共有几种填法。
变形一下就会发现其实是走非交叉格子路径计数,限制条件下的非降路径问题。就是从左上到右下走格子路径。从上到下为0——n,从左到右为0——m。

考虑 01 和 12 的分界线,是 (n, 0) 到 (0, m) 的两条不相交(可重合)路径,因为起点重合了,所以把其中一条路径往左上平移了一格,平移其中一条变成 (n-1, -1) 到 (-1, m-1) 变成起点 (n, 0) 和 (n-1, -1),终点 (0, m) 和 (-1, m-1) 的严格不相交路径。可以想一下,分界线将格子图分成三部分,从左上到右下依次为0,1,2。(不好意思,史诗灾难级灵魂脱壳画手。。。)

叉姐说套Lindström–Gessel–Viennot引理:


就可以得到公式: (Cn+m, n) 2 - Cn+m, m - 1 *Cn+m, n-1。
通过组合数求解的模板,就可以了。
关于Lindström–Gessel–Viennot引理,具体的不清楚,有兴趣的自己去看吧。
和本题有关的传送门:
2.非降路径问题
4.Lindström–Gessel–Viennot lemma 应用两则
5.Lindström–Gessel–Viennot lemma
两份代码:一份自己的垃圾代码,一份叉姐的官方题解标程
代码:(我的)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=1e5+;
const ll MOD = 1e9+;
ll F[N], Finv[N], inv[N];
void init()
{
inv[] = ;
for(ll i = ; i < N; i ++)
{
inv[i] = (MOD - MOD / i) * 1ll * inv[MOD % i] % MOD;
}
F[] = Finv[] = ;
for(ll i = ; i < N; i ++)
{
F[i] = F[i-] * 1ll * i % MOD;
Finv[i] = Finv[i-] * 1ll * inv[i] % MOD;
}
}
ll comb(ll n, ll m)//c(n,m);
{
if(m < || m > n) return ;
return F[n] * 1ll * Finv[n - m] % MOD * Finv[m] % MOD;
}
int main()
{
init();
int n,m;
while(~scanf("%d%d",&n,&m)){
ll cnt1=comb(n+m,n)*comb(n+m,n);
ll cnt2=comb(n+m,m-)*comb(n+m,n-);
ll ans=((cnt1-cnt2)%MOD+MOD)%MOD;
cout<<ans<<endl;
}
}
代码:(叉姐的官方标程)
#include <bits/stdc++.h> const int MOD = 1e9 + ; const int N = ; int dp[N][N]; void update(int& x, int a)
{
x += a;
if (x >= MOD) {
x -= MOD;
}
} int sqr(int x)
{
return 1LL * x * x % MOD;
} int main()
{
dp[][] = ;
for (int i = ; i < N; ++ i) {
for (int j = ; j < N; ++ j) {
if (i) {
update(dp[i][j], dp[i - ][j]);
}
if (j) {
update(dp[i][j], dp[i][j - ]);
}
}
}
int n, m;
while (scanf("%d%d", &n, &m) == ) {
printf("%d\n", static_cast<int>((sqr(dp[n][m]) + MOD - 1LL * dp[n - ][m + ] * dp[n + ][m - ] % MOD) % MOD));
}
}
溜了溜了。
牛客网 暑期ACM多校训练营(第一场)A.Monotonic Matrix-矩阵转化为格子路径的非降路径计数,Lindström-Gessel-Viennot引理-组合数学的更多相关文章
- 牛客网暑期ACM多校训练营 第九场
HPrefix Sum study from : https://blog.csdn.net/mitsuha_/article/details/81774727 k较小.分离x和k. 另外的可能:求a ...
- 牛客网暑期ACM多校训练营(第四场):A Ternary String(欧拉降幂)
链接:牛客网暑期ACM多校训练营(第四场):A Ternary String 题意:给出一段数列 s,只包含 0.1.2 三种数.每秒在每个 2 后面会插入一个 1 ,每个 1 后面会插入一个 0,之 ...
- 牛客网暑期ACM多校训练营(第五场):F - take
链接:牛客网暑期ACM多校训练营(第五场):F - take 题意: Kanade有n个盒子,第i个盒子有p [i]概率有一个d [i]大小的钻石. 起初,Kanade有一颗0号钻石.她将从第1到第n ...
- 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?
牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...
- 牛客网暑期ACM多校训练营(第三场)H Diff-prime Pairs (贡献)
牛客网暑期ACM多校训练营(第三场)H Diff-prime Pairs (贡献) 链接:https://ac.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy ha ...
- 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)
2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...
- 牛客网暑期ACM多校训练营(第七场)Bit Compression
链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 题目描述 A binary string s of length N = 2n is give ...
- 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)
链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...
- 牛客网暑期ACM多校训练营(第九场) A题 FWT
链接:https://www.nowcoder.com/acm/contest/147/A来源:牛客网 Niuniu has recently learned how to use Gaussian ...
随机推荐
- unbantu安装wmvare
最新评论 wsmyyjie:写的太好了!!! zhangmin92:回复 wopapa523: 这个是你用另一.. wopapa523:请问i11是在哪里输入的? myh65013:挺深入的 andk ...
- Pascal编写的蠕虫病毒,凌盟提供,Chaobs转载
{ Happy Birthday (c) 1998 WoRmI don't take responsibility for any damage caused by this virus.It was ...
- 【Substring with Concatenation of All Words】cpp
题目: You are given a string, s, and a list of words, words, that are all of the same length. Find all ...
- HTML简易学习笔记
文字版地址 https://github.com/songzhenhua/github/blob/master/HTML简易学习笔记.txt
- Python 3基础教程12-常见的错误
本文来介绍几种常见的错误,任何人在刚开始接触一个新的语言,即使照着代码抄写,也可能会犯错误,这里我们就介绍几种常见的错误,看看你是否遇到过. 1. NameError: name 'xxx' is n ...
- Opencv2.4.13.6安装包
这个资源是Opencv2.4.13.6安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载
- 团队Alpha版本(九)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- ASP.NET——视频总结
ASP.NET的视频很早就看完了,但一直还没顾上总结.虽然在备战软考,学习任务很重,但是阶段的总结还是不要推太久了,不然也就起不到总结的效果了.在看视频之前,虽然已经做过了新闻发布系统,但是对B/S一 ...
- Scala 基础(3)—— 基础类型和基础操作
1. Scala 的一些基础类型 Scala 提供了 8 种基础类型,对应 Java 的 8 种基本数据类型. 其中包括: 整数类型:Byte, Short, Int, Long, Char 浮点类型 ...
- css实现0.5像素
.border{ position: relative; } .border:before{ content: ''; position: absolute; width: 200%; height: ...