洛谷 B2164:组合数问题 ← 杨辉三角

【题目来源】
https://www.luogu.com.cn/problem/B2164

【题目描述】
给定两个正整数 n 和 m,请你计算从 n 个不同的元素中选择 m 个元素的方案数(选择的顺序不重要)。
由于方案数可能很大,请输出方案数对 10^9+7 取模的结果,也就是输出方案数除以 10^9+7 的余数。

【输入格式】
一行,包含两个整数 n 和 m

【输出格式】
一个整数,表示组合数 C(n,m) 对 10^9+7 取模的结果。

【输入样例】
5 3

【输出样例】
10

【数据范围】
对于 20% 的数据,满足 1≤m≤n≤10
对于 100% 的数据,满足 1≤m≤n≤5000

【算法分析】
(1)杨辉三角第 n 行(n≥1)包含 n 个数字,对应二项式 (a+b)ⁿ⁻¹ 展开式的系数。 其中,(a+b)ⁿ = C(n,0)aⁿ + C(n,1)aⁿ⁻¹b¹ + C(n,2)aⁿ⁻²b² + ... + C(n,n-1)a¹bⁿ⁻¹ + C(n,n)bⁿ
(2)杨辉三角第 n 行第 k 个数等于组合数 C(n-1,k-1)。 其中,C(n,k) = n! ∕ (k!·(n−k)!)。

【算法代码】

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N=5e3+5;
int c[N][N];
const int MOD=1e9+7;

int main() {
    for(int i=0; i<N; i++) {
        for(int j=0; j<=i; j++) {
            if(j==0) c[i][j]=1;
            else c[i][j]=(c[i-1][j-1]+c[i-1][j])%MOD;
        }
    }

    int x,y;
    cin>>x>>y;
    cout<<c[x][y]<<endl;

    return 0;
}

/*
in:5 3
out:10
*/

【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/147570319
https://www.luogu.com.cn/problem/solution/B2164

相关推荐
汀、人工智能4 天前
[特殊字符] 第72课:杨辉三角
数据结构·算法·数据库架构·图论·bfs·杨辉三角
hnjzsyjyj6 天前
洛谷 P8749:[蓝桥杯 2021 省 B] 杨辉三角形 ← 组合数 + 二分
蓝桥杯·二分·杨辉三角·组合数
2401_841495644 个月前
【LeetCode刷题】杨辉三角
数据结构·python·算法·leetcode·杨辉三角·时间复杂度·空间复杂度
ShineWinsu7 个月前
对于牛客网—语言学习篇—编程初学者入门训练—复合类型:BC140 杨辉三角、BC133 回型矩阵、BC134 蛇形矩阵题目的解析
c语言·矩阵·数组·蛇形矩阵·杨辉三角·牛客网·回型矩阵
DogDaoDao2 年前
LeetCode 算法:杨辉三角 c++
数据结构·c++·算法·leetcode·数组·数据结构与算法·杨辉三角
狮子座的男孩2 年前
13、java 数组常见算法(经典案例)、Arrays类的使用(操作数组工具类)、数组常见异常(角标越界或空指针)
java·经验分享·后端·冒泡排序·快速排序·杨辉三角·数组常见异常
DBWYX2 年前
排列组合板子A(n,m)C(n,m) ; 递推组合数公式 ; 杨辉三角
c语言·开发语言·杨辉三角·组合数
PZHU_CG_csdn3 年前
HJ53 杨辉三角的变形
杨辉三角