首页 > 其他 > 详细

【牛客网多校第一场】A

时间:2018-08-11 00:06:19      阅读:166      评论:0      收藏:0      [点我收藏+]

题目链接:https://www.nowcoder.com/acm/contest/139/A

 

题意:大概就是给你0,1,2让你填矩阵问有多少种填法满足

a(i,j)<=a(i+1,j)以及a(i,j)<=a(i,j+1)

 

题解:Lindström–Gessel–Viennot lemm这个定理的应用。

本鶸也是第一次看见这种东西。去稍微了解了一下。是一个求不相交路径的东西。

给定n个起点,n个终点,不相交路径的方法数的矩阵行列式如下。

技术分享图片

其中e(a,b)为图上a到b的方案数。

 

题解上的ppt给的思路是,

技术分享图片

其实也就是把所有的0往左上角搬,2往所有的右下角搬。(感谢bang哥的指导)

 

打个组合的板子,用公式一带就行了!。

 

代码如下:

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 #define ll long long
 6 const ll mod=1e9+7;
 7 const int maxn=2010;
 8 ll c[maxn][maxn];
 9 
10 int main(){
11     ll n,m;
12 //递推求组合数 
13     c[1][1] = 1;
14     c[0][0] = c[1][0] = 1;
15     for(int i = 2 ; i < maxn ; i++){
16         c[i][0] = 0;
17         for(int j = 0 ; j <= i; j++) 
18             c[i][j] = ( c[i-1][j] + c[i-1][j-1] ) % mod;
19     }
20   
21     while(scanf("%lld%lld",&n,&m)==2){
22         printf("%lld\n",(c[n+m][n]*c[m+n][n]%mod-c[n+m][m-1]*c[n+m][n-1]%mod+mod)%mod);
23     }
24     return 0;
25 }
View Code

 

【牛客网多校第一场】A

原文:https://www.cnblogs.com/Asumi/p/9457931.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!