zoukankan      html  css  js  c++  java
  • 17.求组合数 I

     需要根据组合数问题的数据范围来选择用哪一种方式来实现求组合数

    上式的证明:要求从a个苹果里选b个苹果的方案数,首先人为的在a个苹果当中随意标记一个苹果,然后把选法分为两种情况

     从a个苹果里选b个苹果的选法中包含这个苹果,以及从a个苹果里选b个苹果的选法中不包含这个苹果

    C(a - 1, b - 1)                 C(a - 1, b)

    所有选法一定可以分成这两类,然后根据加法原理,得出上式

     根据这个递推式来求

    用2000 * 2000的时间复杂度,预处理出来所有的C(a, b)的值

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N = 2010, mod = 1e9 + 7;
     4 int c[N][N];
     5 void init() {
     6     for (int i = 0; i < N; i++) {
     7         for (int j = 0; j <= i; j++) {
     8             if (!j) { //如果j = 0的话,选法只有一种:不选
     9                 c[i][j] = 1; 
    10             } else {
    11                 c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
    12             }
    13         }
    14     }
    15 }
    16 int main() {
    17     init();
    18     int n;
    19     cin >> n;
    20     while (n--) {
    21         int a, b;
    22         cin >> a >> b;
    23         cout << c[a][b] << endl;
    24     }
    25     return 0;   
    26 }
  • 相关阅读:
    SQL的增删改查
    SQL语句的分类
    创建新DB和新用户&DBeaver连接
    jQuery css() 方法:设置或返回被选元素的一个或多个样式属性
    jQuery
    jQuery
    jQuery
    jQuery
    jQuery
    jQuery
  • 原文地址:https://www.cnblogs.com/fx1998/p/13454201.html
Copyright © 2011-2022 走看看