51nod1119 機器人走方格 V2(組合數學)


原題鏈接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1119

思路:組合數學最基本的各路模型,從(0,0)點走到(n,m)點,只能想右或者下的方案數,等於C(N+M,N) 也就是從一共N+M步中選擇N步向下

AC代碼:

#include<bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 1000000;
int inv;

int qpow(int a, int b) {
int ans = 1;
while (b) {
if (b & 1)ans = 1LL * ans * a%MOD;
b >>= 1;
a = 1LL * a * a % MOD;
}
return ans;
}

int f(int a) {
return (a == 1 || a == 0) ? 1 : 1LL * a*f(a - 1) % MOD;
}
int C(int a, int b) {
int ans = 1;
int t = f(b);
for (int i = a; i > a - b; i--) {
ans = 1LL * ans*i % MOD;
}
ans = 1LL * ans * inv % MOD;
return ans;
}

int main() {
int m, n;
scanf("%d %d", &m, &n);
inv = qpow(f(n - 1), MOD - 2);
printf("%d\n", C(m + n - 2, n - 1));
return 0;
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com