求组合数(1)(排列组合) —— 范围较小


 常用组合数的递推式:

解释: 有a个苹果,从中拿b个苹果;   我们先确定一个苹果a。 然后有两种情况: 一是不包括苹果a,从中拿b个苹果。 二是包含苹果a,再从中拿b-1个苹果。 如此递推。

#include 
using namespace std;
const int N = 2010, mod = 1e9 + 7;
int c[N][N];
int n;

int main()
{
    cin >> n;
    
    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] + c[i-1][j-1]) % mod;
    while(n--)
    {
        int a, b;
        cin >> a >> b;
        cout << c[a][b] << endl;
    }
    
    return 0;
}