[AcWing]885. 求组合数 I(C++实现)求组合数模板题
生活随笔
收集整理的這篇文章主要介紹了
[AcWing]885. 求组合数 I(C++实现)求组合数模板题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[AcWing]885. 求組合數 I(C++實現)求組合數第一種題型模板題
- 1. 題目
- 2. 讀題(需要重點注意的東西)
- 3. 解法
- 4. 可能有幫助的前置習題
- 5. 所用到的數據結構與算法思想
- 6. 總結
求組合數有很多種題型,我們需要根據輸入的數據的范圍來選哪種方式,具體的方式有如下幾種:
主要是詢問次數和數據大小的不同,對應了不同的解法
此外,另有高精度組合數和卡特蘭數兩種特例
1. 題目
2. 讀題(需要重點注意的東西)
思路:
首先,要知道組合數是什么?公式是什么?
一般地,從a個不同的元素中,任取b(b≤a)個元素為一組,叫作從aa個不同元素中取出b個元素的一個組合,這個組合一共有多少組?
公式如下:
可以推出
(先取出1個元素,這個元素可能在b中,可能不在,所以有如下兩種可能)
3. 解法
---------------------------------------------------解法---------------------------------------------------
#include <iostream> #include <algorithm>using namespace std;const int N = 2010, mod = 1e9 + 7;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; // 如果j為0else c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod; }int main() {int n;init();scanf("%d", &n);while (n -- ){int a, b;scanf("%d%d", &a, &b);printf("%d\n", c[a][b]);}return 0; }4. 可能有幫助的前置習題
5. 所用到的數據結構與算法思想
- 組合數
6. 總結
求組合數第一種題型的模板題,理解思路并背下代碼。
總結
以上是生活随笔為你收集整理的[AcWing]885. 求组合数 I(C++实现)求组合数模板题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 885n虚拟服务器,TP-Link TL
- 下一篇: 三相桥式全控整流电路matlab仿真,三