模板题。
数据范围较大时:
1 double cal(double x, double y) 2 { 3 double i, j, sum = 1; 4 if(y > (x/2)) 5 y = x - y; 6 7 for(i = x, j = 1; i > x-y; i--, j++) 8 { 9 sum *= i; 10 sum /= j; 11 } 12 13 return sum; 14 }
数据范围较小时,可以用 C(n,m) = C(n-1.m-1) + C(n,m-1); 从 m 中 选 n
1 void init()//c(n,m) = c(n-1,m-1) + c(n,m-1); 从m中选n 2 { 3 int i,j; 4 cn[0][0] = 0; 5 for(i = 1;i <= 32; ++i) 6 { 7 for(j = 0;j <= i; j++) 8 { 9 if(j == 1) 10 cn[j][i] = i; 11 else if(j == 0 || i == j) 12 cn[j][i] = 1; 13 else 14 cn[j][i] = cn[j-1][i-1] + cn[j][i-1]; 15 } 16 } 17 }
这道题的AC代码
1 Paths on a Grid