看蓝色那部分,可以看到是个杨辉三角,可以用杨辉三角做。
我想是去掉第一行和第一列,这个题就和机器人走方格那个题基本一样了,解法也相同
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll n,m;
const int mod = 1e9+7;
ll extend_gcd(ll a, ll b, ll& x, ll& y)
{
if(a==0&&b==0) return-1;
if(b==0){x=1;y=0;return a;}
ll d = extend_gcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
ll mod_reverse(ll a, ll n)
{
ll x,y;
ll d = extend_gcd(a,n,x,y);
if(d==1)return (x%n+n)%n;
else return -1;
}
ll solve(ll n, ll m)
{
ll fz = 1,fm = 1;
for(ll i = m+1; i <= n; ++i)
fz = (fz*i)%mod;
for(ll i = 1; i <= n-m; ++i)
fm = (fm*i)%mod;
fm = mod_reverse(fm,mod);
return fz*fm%mod;
}
int main()
{
cin >> n >> m;
cout << solve(n+m-4,n-2) <<endl;
return 0;
}