考虑枚举移动的步数 i
那么答案就是
示例程序:
#include<cstdio>
typedef long long ll;
const int maxn=100005,tt=1e9+7;
int n,m;
ll fac[maxn],inv[maxn],ans;
ll power(ll a,int b){
ll w=a,res=1;
while (b){
if (b&1) res=res*w%tt;
w=w*w%tt;
b>>=1;
}
return res;
}
void make(){
fac[0]=1;inv[0]=1;
for (int i=1;i<=100000;i++) fac[i]=fac[i-1]*i%tt,inv[i]=power(fac[i],tt-2);
}
inline ll C(int y,int x){
return fac[x]*inv[y]%tt*inv[x-y]%tt;
}
int main(){
scanf("%d%d",&n,&m);
if (n==2||m==2) return printf("1"),0;
make();ans=0;
for (int i=1;i<n&&i<m;i++)
(ans+=C(i-1,n-2)*C(i-1,m-2)%tt)%=tt;
printf("%lld",ans);
return 0;
}

本文介绍了一种使用组合数学方法解决特定网格中从左上角到右下角的路径计数问题的方法。通过枚举移动步数,并利用组合公式进行计算,最终给出了一段C++实现代码。
982

被折叠的 条评论
为什么被折叠?



