http://acm.hdu.edu.cn/showproblem.php?pid=5698
方法一:暴力打表找规律看出是一个斜的杨辉三角,答案是C(n+m-4,m-2)
方法二:排列组合。枚举走了x步到达(n,m),对于行,对于列分开看,就各自相当于有n-1,m-1个相同的小球分成x组,每组至少有1个的方案数,用隔板法。答案就是Σ C(n-x,x)*C(m-x,x) ,x∈[1,min{n-1,m-1}]
方法二:https://blog.csdn.net/qwb492859377/article/details/51478117
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
ll n,m,c[200000+10],fac[200000+10];
ll pow_mod(ll a,ll n)
{
if(n==0)return 1;
ll x=pow_mod(a,n/2);
x=x*x%mod;
if(n&1)x=x*a%mod;
return x;
}
int main()
{
fac[0]=1;
for(int i=1;i<=200000;i++)fac[i]=(fac[i-1]*i)%mod;
while(cin>>n>>m)
{
int N=n+m-4,M=m-2;
cout<<fac[N]*pow_mod(fac[M],mod-2)%mod*pow_mod(fac[N-M],mod-2)%mod<<endl;
}
return 0;
}