题意
传送门 LeeCode 62. 不同路径
题解
路径长度为 m + n − 2 m+n-2 m+n−2,纵向 m − 1 m-1 m−1 个,横向 n − 1 n-1 n−1 个,则路径总数为 C m + n − 2 n − 1 C_{m+n-2}^{n-1} Cm+n−2n−1。
组合数打表即可,递推式可理解为对于 C m n C_{m}^{n} Cmn,最后一个可以取或不取
C m n = C m − 1 n − 1 + C m − 1 n C_{m}^{n}=C_{m-1}^{n-1}+C_{m-1}^{n} Cmn=Cm−1n−1+Cm−1n
class Solution {
private:
static const int MAX_N = 100;
static const int mod = 2e9;
long long dp[MAX_N * 2][MAX_N];
void init(){
for(int m = 0; m < MAX_N * 2; m++) dp[m][0] = 1;
for(int m = 1; m < MAX_N * 2; m++){
for(int n = 1; n < MAX_N; n++){
dp[m][n] = (dp[m - 1][n - 1] + dp[m - 1][n]) % mod;
}
}
}
public:
int uniquePaths(int m, int n) {
init();
return dp[m + n - 2][n - 1];
}
};