POJ 1942 Paths on a Grid

// n*m 的格子 从左下角走到右上角的种数
// 相当于从 n+m 的步数中选 m 步往上走
// C(n+m,m)
#include <iostream> #include <string> #include<sstream> #include <cmath> #include <map> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define LL long long LL C(LL n,LL k) { LL m=1; if(k>n/2) k=n-k; // 不加这句会超时 比如C[10^9][10^9 - 1] int i; for(i=1;i<=k;i++) { m*=(n-i+1); m/=i; } return m; } int main() { LL n,k; while(scanf("%lld %lld",&n,&k),n|k) { printf("%lld ",C(n+k,k)); } return 0; }
原文地址:https://www.cnblogs.com/372465774y/p/3603233.html