51Nod 1118 机器人走方格(dp/快速幂)
用高中学的排列组合做
C(n-1,n+m-2)
最后要求
(x/y) %mod =x*(y^(mod-2))%mod;
然后用快速幂
注意longlong
#include<iostream>
#include<queue>
#include<vector>
#include<stack>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
using namespace std;
long long mod=1e9+7;
long long jc(int len){
long long sum=1;
for(int i=1;i<=len;i++){
sum=(sum*i)%mod;
}
return sum;
}
long long getsum(int num,int len){
long long sum=1;
while(len--){
sum*=num--;
sum%=mod;
}
return sum;
}
long long KSM(long long num,long long len){
long long temp=num;
long long sum=1;
while(len){
if(len&1) sum=(sum*temp)%mod;
temp=(temp*temp)%mod;
len=len>>1;
}
return sum;
}
int main(){
int n,m;
cin>>n>>m;
long long sum=getsum(n+m-2,n-1);
long long chushu=jc(n-1);
long long ksm=KSM(chushu,mod-2);
printf("%d",(sum*ksm)%mod);
return 0;
}