数论是个好东西


今天讲的是组合计数


组合计数

组合数学主要是研究一组离散对象满足一定条件的安排的存在性、构造及计数问题。计数理论是狭义组合数学中最基本的一个研究方向,主要研究的是满足一定条件的排列组合及计数问题。组合计数包含计数原理、计数方法、计数公式。

组合计数基本原理

加法原理

如果一个目标的实现可以在种不同的情况下完成,且对于第种情况又有种不同的方法,那么总的方法数为:

其中,每种条件达成都能单独实现目标,而不依赖其他条件;任意情况的任两种方法都是唯一的。

乘法原理

如果一个目标的实现需要经过个步骤,对于第步有种不同的方式实现,那么总的方法数为:

其中,步骤之间可能存在拓扑关系,但每个步骤都必不可少;每一步内选择何种方式不受其他步骤影响。

容斥原理

组合计数最重要的事不重复不遗漏。但一般情况下总会出现很多的重复计算,又或者在分类讨论中遗漏某种情况。这时我们就需要容斥原理。容斥原理的基本思想是:先不考虑重复,得出所有的情况数,然后再排除重复计算的部分,由于每一步都有理可循,正确运用即可做到不遗漏不重复。

公式:

设是有限集合,,,则

容斥公式可以由如下集合运算的基本公式(德摩根公式)以及数学归纳法证明得到:

 

组合计数基本公式

排列数公式

从n个不同元素中任取m(m≦n)个元素排成一列(考虑元素先后出现次序),叫做从n个不同元素中取出m个元素的一个排列。排列的总数即为排列数,即叫做从n个不同元素中取出m个元素的排列数(number of permutations)。排列数用符号P(Permutation)或者A(Arrangement)表示。

表示从个元素里取出个并排列(要考虑顺序)得到的方案数。

拓展

循环排列:又称圆排列,指从个元素里取出个元素构成循环排列的排列数,把个元素分成类,第类元素的个数为,此时个元素的排列数

组合数公式

从n个不同元素中任取m(m≦n)个元素构成一组(不考虑顺序),叫做从n个不同元素中取出m个元素的一个组合。组合的总数即为组合数,即叫做从n个不同元素中取出m个元素的组合数(number of combinations)。组合数用符号C表示:

表示从个元素里取出个构成一组(不考虑顺序)得到的方案数,也可以用二项式系数()表示。

拓展

类元素,每类元素个数均为无限,从这些元素中取出个的组合数为

组合数的性质

组合数递推式:二项式系数:

错排公式

错排问题也是组合数学的经典问题之一。错排即错误的排列:对于n个元素构成的一种排列,对其重新排序使得每一个元素都不在原来的位置上,这样的排列就称为原排列的一个错排。n个元素的一个排列的错排数记为D(n),则:

取整,由的展开式推出

组合计数常用技巧

捆绑法

当要求某些元素必须相邻时,先把他们看作一个整体,然后把整体当成一个元素和其他元素一起考虑。要注意:整体内部也有顺序。

插空法

当要求某些元素不能相邻时,可以先把其他元素排好,然后再把要求不相邻的元素插入到已排好的元素的空隙或两端。

隔板法

在解决若干相同元素分组问题时,若要求每组至少一个元素,则可以转化为在排成一列的这些元素中插入组数减1个“隔板”,达到分组目的。

例:个小球个盒子,每个盒子不为空,则有种方案;若盒子不要求非空,则可由引入个球,隔板法解决后从每个盒子里各取走一个球,方案数为

以上只是课件,不要太在意。

今天做题,一上来A题就是个水题,输入数据 <= 100 !!!我的天 !!!

题意:

给定一个N,K,使K个整数之和等于N,求方案数mod 1,000,000的结果

原题面:

Larry is very bad at math — he usually uses a calculator, which
worked well throughout college. Unforunately, he is now struck in
a deserted island with his good buddy Ryan after a snowboarding
accident.
They’re now trying to spend some time figuring out some good
problems, and Ryan will eat Larry if he cannot answer, so his fate
is up to you!
It’s a very simple problem — given a number N, how many ways
can K numbers less than N add up to N?
For example, for N = 20 and K = 2, there are 21 ways:
0+20
1+19
2+18
3+17
4+16
5+15
...
18+2
19+1
20+0
Input
Each line will contain a pair of numbers N and K. N and K will both be an integer from 1 to 100,
inclusive. The input will terminate on 2 0’s.
Output
Since Larry is only interested in the last few digits of the answer, for each pair of numbers N and K,
print a single number mod 1,000,000 on a single line.
Sample Input
20 2
20 2
0 0
Sample Output
21
21

How do you add? UVA - 10943

思路:

简单,DP都能做。

明显隔板法

因为可以为0

所以要加k个0

所以就有n + k - 1个空

有k - 1个板

答案为 C(n - k + 1, k - 1)

代码:

#include <algorithm>
#include <cstring>
#include <iostream>
​
#define N 220
#define mod 1000000
#define ll long long
using namespace std;
​
int n,k,f[N][N];
int dfs(int a,int b)
{
    if(a < b)
        ;
    )
        ;
    )
        ;
    if(f[a][b])
        return f[a][b];
​
    , b - ) + dfs(a - , b)) % mod;
}
​
int main()
{
    while(true)
    {
        scanf("%d %d",&n,&k);
        if(!n && !k)
            break;
​
        printf(, n));
    }
    ;
}

未完待续

数论 Day 12的更多相关文章

  1. python 各模块

    01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...

  2. Python Standard Library

    Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...

  3. 在mybatis中写sql语句的一些体会

    本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...

  4. 2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ π )

    2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ \(\pi\) ) https://www.luogu.com.cn/problem/P2508 题意: 求一个给定的圆 \( ...

  5. 2018.12.31 NOIP训练 偶数个5(简单数论)

    传送门 对于出题人zxyoizxyoizxyoi先%\%%为敬题目需要龟速乘差评. 题意简述:5e55e55e5组数据,给出n,请你求出所有n位数中有偶数个5的有多少,n≤1e18n\le1e18n≤ ...

  6. 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)

    传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...

  7. 2018.12.17 bzoj1406 : [AHOI2007]密码箱(简单数论)

    传送门 简单数论暴力题. 题目简述:要求求出所有满足x2≡1mod&ThinSpace;&ThinSpace;nx^2\equiv1 \mod nx2≡1modn且0≤x<n0\ ...

  8. 牛客小白月赛12 D 月月给华华出题 (欧拉函数,数论,线筛)

    链接:https://ac.nowcoder.com/acm/contest/392/D 来源:牛客网 月月给华华出题 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K, ...

  9. 洛谷P1390 公约数的和 [2017年6月计划 数论12]

    P1390 公约数的和 题目描述 有一天,TIBBAR和LXL比赛谁先算出1~N这N个数中每任意两个不同的数的最大公约数的和.LXL还在敲一个复杂而冗长的程序,争取能在100s内出解.而TIBBAR则 ...

随机推荐

  1. Postgresql部署及简单操作

    PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS),在开源数据库使用上与MySQL各领风骚.但也有不少人质疑postgresql的未来,正所谓,赞扬或批判一种数据库都必须先 ...

  2. (四)c#Winform自定义控件-选择按钮组

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  3. spring cloud 断路器 Hystrix

    一.微服务架构中使用断路器的原因 二.代码实现 1.在Ribbon中使用短路器 1.1.引入依赖 <dependency> <groupId>org.springframewo ...

  4. 如何彻底禁用 werfalut.exe

    在程序中调用 控制台程序 的时候,一旦出现控制台出现 crash 往往会弹出 werfault 窗口, 这样往往会锁死线程,导致程序无法继续运行. 那如何禁止 werfault 窗口的弹出呢? 在 s ...

  5. serverless在微店node领域的探索应用

    背景 目前微店中台团队为了满足公司大部分产品.运营以及部分后端开发人员的尝鲜和试错的需求,提供了一套基于图形化搭建的服务端接口交付方案,利用该方案及提供的系统可生成一副包含运行时环境定义可立即运行的工 ...

  6. 【Node/JavaScript】论一个低配版Web实时通信库是如何实现的( WebSocket篇)

    引论 simple-socket是我写的一个"低配版"的Web实时通信工具(相对于Socket.io),在参考了相关源码和资料的基础上,实现了前后端实时互通的基本功能 选用了Web ...

  7. Mina实现Socket通信完整过程

    目录 服务端 客户端 通信 自定义工厂编解码 解码器 编码器 总结 # 加入战队 微信公众号 title: Mina服务端客户端通信 date: 2018-09-30 09:00:30 tags: - ...

  8. Spring Context 你真的懂了吗

    今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识. 1. context 是什么 我们经常在编程中见到 contex ...

  9. html利用j获取局域网内的本机IP(根据客户端浏览器的ip获取)

    根据客户端浏览器的ip获取 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type ...

  10. 【Python3爬虫】快就完事了--使用Celery加速你的爬虫

    一.写在前面 在上一篇博客中提到过对于网络爬虫这种包含大量网络请求的任务,是可以用Celery来做到加速爬取的,那么,这一篇博客就要具体说一下怎么用Celery来对我们的爬虫进行一个加速! 二.知识补 ...