题目连接:https://www.nowcoder.com/acm/contest/139/A
题意:给你一个n x m的矩阵让你向其中填{0,1,2}三个数且满足Ai,j⩽Ai+1,jAi,j⩽Ai+1,j,Ai,j⩽Ai,j+1Ai,j⩽Ai,j+1有几种填法
就是一个0 1 2 组成的矩阵 分成三块
需要用到Lindström–Gessel–Viennot引理
推荐连接:https://blog.csdn.net/ftx456789/article/details/81132126
http://www.doc88.com/p-905565444794.html (pku的课件)
能看懂那个定理 代码就很短了
#include<bits/stdc++.h>
using namespace std;
const long long mod = 1e9+7;
long long dp[2005][2005];
void in()
{
dp[0][0] = 1;
for(int i = 1;i <= 2002;i++)
{
dp[i][0] = 1;
for(int j = 1;j <= i;j++)
{
dp[i][j] = (dp[i-1][j]+dp[i-1][j-1])%mod;
}
}
}
int main()
{
in();
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
long long temp=(dp[n+m][n]%mod*dp[n+m][n]%mod-dp[n+m][n+1]%mod*(dp[n+m][m+1]%mod))%mod;
printf("%lld\n",(temp+mod)%mod);
}
return 0;
}