组合数
第一类组合数的解决方案
易知组合数表示的是在n个物品中选择m个不同物品的方案的数
C
(
m
n
)
=
C
(
m
−
1
n
−
1
)
+
C
(
m
−
1
n
)
C\tbinom{m}{n} = C\tbinom{m - 1}{n - 1} + C\tbinom{m - 1}{n}
C(nm)=C(n−1m−1)+C(nm−1)
我们可以得到这样的类似于状态转移方程的东西
1.思路
我们可以把其中一种物品的结果拿出来,结果就分成两种
①我们选择的物体被选中,即$ C\tbinom{m - 1}{n }$
②我们选择的物体没有被选中$ C\tbinom{m - 1}{n - 1}$
最后的结果就分为这两种
即满足这种条件。
给定 n 组询问,每组询问给定两个整数 a,b,请你输出 C ( a b ) ( 109 + 7 ) C\tbinom{a}{b}(109+7) C(ba)(109+7) 的值。
题解
#include<bits/stdc++.h>
using namespace std;
const int N = 2010, mod = 1e9 + 7;
int n, a, b;
int c[N][N];
void init()//初始化状态转移方程
{
for(int i = 0; i < N; i++)
for(int j = 0;j <= i;j++){
if(!j) c[i][j] = 1;
else c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
}
}
int main(){
init();
scanf("%d",&n);
while(n--){
scanf("%d%d",&a, &b);
cout << c[a][b] << endl;
}
return 0;
}