题解:AcWing 885 求组合数 I

【题目来源】

AcWing:885. 求组合数 I - AcWing题库

【题目描述】

给定 \(n\) 组询问,每组询问给定两个整数 \(a,b\),请你输出 \(C_a^b\ mod\ (10^9+7)\) 的值。

【输入】

第一行包含整数 \(n\)

接下来 \(n\) 行,每行包含一组 \(a\)\(b\)

【输出】

\(n\) 行,每行输出一个询问的解。

【输入样例】

3
3 1
5 3
2 2

【输出样例】

3
10
1

【解题思路】

image

【算法标签】

《AcWing 885 求组合数I》 #组合数学# #组合计数# #递推#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

const int N = 2005, mod = 1e9 + 7; // 定义常量 N 和 mod
int c[N][N]; // c 数组存储组合数 C(i, j)

// 初始化组合数表
void init()
{
    for (int i = 0; i < N; i++) { // 遍历 i 从 0 到 N-1
        for (int j = 0; j <= i; j++) { // 遍历 j 从 0 到 i
            if (j == 0) c[i][j] = 1; // 如果 j 为 0,C(i, 0) = 1
            else c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod; // 递推计算 C(i, j)
        }
    }
}

int main()
{
    int n; // 定义整数 n,表示查询的次数
    init(); // 初始化组合数表
    cin >> n; // 输入查询的次数 n
    while (n--) { // 遍历每个查询
        int a, b; // 定义整数 a 和 b
        cin >> a >> b; // 输入 a 和 b
        cout << c[a][b] << endl; // 输出组合数 C(a, b)
    }
    return 0; // 程序结束
}

【运行结果】

3
3 1
3
5 3
10
2 2
1
posted @ 2026-02-24 22:21  团爸讲算法  阅读(1)  评论(0)    收藏  举报