欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > AcWing 885:求组合数 I ← 杨辉三角

AcWing 885:求组合数 I ← 杨辉三角

2025/11/15 12:07:41 来源:https://blog.csdn.net/hnjzsyjyj/article/details/147570319  浏览:    关键词:AcWing 885:求组合数 I ← 杨辉三角

【题目来源】
https://www.acwing.com/problem/content/887/

【题目描述】
给定 n 组询问,每组询问给定两个整数 a,b,请你输出
C(a,b) mod (10^9+7) 的值。

【输入格式】
第一行包含整数 n。
接下来 n 行,每行包含一组 a 和 b。

【输出格式】
共 n 行,每行输出一个询问的解。

【数据范围】
1≤n≤
10000,
1≤b≤a≤
2000

【输入样例】
3
3 1
5 3
2 2

【输出样例】
3
10
1

【算法分析】
● 本题利用公式 
C(i, j)=C(i-1, j-1)+C(i-1, j) 进行组合数求解。

● 杨辉三角是二项式系数在三角形中的一种几何排列。
(1)杨辉三角第 n 行包含 n 个数字,对应二项式 (a+b)ⁿ⁻¹ 展开式的系数。
(2)杨辉三角第 n 行第 k 个数等于组合数 C(n-1,k-1)。
(3)杨辉三角第 n 行的数字和为 2ⁿ⁻¹。
(4)杨辉三角左对齐后,沿‌ 45° 斜线‌(↙方向)的数字和构成斐波那契数列。


(5)杨辉三角左对齐后,第 i 行第 j 列的数=第 i-1 行第 j-1 列的数+第 i-1 行第 j 列的数。正是组合数性质 C(i, j)=C(i-1, j-1)+C(i-1, j) 的几何体现。


【算法代码】

#include<bits/stdc++.h>
using namespace std;int c[2005][2005];
const int mod=1e9+7;int main() {int n;cin>>n;for(int i=0; i<=2000; 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;}}while(n--) {int x,y;cin>>x>>y;cout<<c[x][y]<<endl;}return 0;
}/*
in:
3
3 1
5 3
2 2out:
3
10
1
*/



【参考文献】
https://www.acwing.com/solution/content/87578/
https://blog.csdn.net/hnjzsyjyj/article/details/147568269
https://www.acwing.com/solution/content/21902/
https://blog.51cto.com/u_15302000/4981839






 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词