注意:此讲适合联赛一试学生,以及参加清华北大等名校的自主招生的学生.

经典计数之分配问题:把n个球放进k个盒子。考虑分配方法有三类:1.无限制 2.每个盒子至多一个(f 单的)3.每个盒子至少一个(f 满的).球和盒子都只考虑两种极端情况:全同或全不同。这样一共会有3*2*2=12种分配情况,如下:

证明:

1.略

2.此时只考虑$k\ge n$这种有意义情况,由分步计数原理易得$(k)_n=k(k-1)\cdots(k-n+1)$

3.此时只考虑$n\ge k$这种有意义情况,第一步将n球分成k部分有$S(n,k)$种方法,第二步

分好的k部分球放到$k$个不同的盒子里有$k!$种排法.所以完成这件事情一共有$k!S(n,k)$种方法.

这里$S(n,k)$定义如下:

4.方程$x_1+x_2+\cdots+x_k=n$的非负整数解.

5.此时只考虑$k\ge n$这种有意义情况,由于“f单”意味着每个盒子里至多放一个球,只需

$k$个盒子里取$n$个,然后取出的盒子各放一个球。

6.方程$x_1+x_2+\cdots+x_k=n$的正整数解.

7.$n$元集至多分成$k$部分.

8.定义

9.$n$元集的$k$部分拆数为第二类$stirling$数$S(n,k)$

10.正整数$n$至多分成$k$个部分。这里分拆数$p(n,k)$定义如下:

注意:这里说的分拆是不计较各部的次序的,比如4的分拆为2,1,1一种。但4的有序分拆有三个(2,1,1);(1,2,1);(1,1,2).一般而言有序分拆好处理.比如$n$的$k$部有序分拆就是$x_1+x_2+\cdots+x_k=n$的正整数个数.

显然$p(n,1)=p(n,n-1)=p(n,n)=1;p(n,2)=[\frac{n}{2}]$,当$k>n$时$p(n,k)=0$一般的$p(n,k)$没有简单的表示方法.

注:$(n_1,n_2,\cdots,n_k)_{\ge}$表示$n_1\ge n_2\ge \cdots \ge n_k\ge1$

原则上所有$p(n,k)$可有递推式逐个求得,例如:

11.定义

12.只需考虑$n\ge k$的情况,正整数$n$的$k$部分拆$p(n,k)$

注:当然除了这12种情况外还有一些情况,比如盒子中有部分相同部分不同。但往往这样

的情况的考察意义不大,因为很难期望会有一般的计数公式.

MT【100】经典计数之分配问题的更多相关文章

  1. 100+经典Java面试题及答案解析

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  2. HDU 4901 多校4 经典计数DP

    RT 最近不想写博客,累积了一周多的题目,今天趁着周日放假,全部补上吧 dp[i][j]表示前i个数,操作后的值为j的总个数 注意取或不取,有种完全背包的意味.因为数字小于1024,所以异或的结果也绝 ...

  3. ACM组合计数入门

    1 排列组合 1.1 排列 \[A_n^m=n(n-1)(n-2)\cdots(n-m+1)=\frac{n!}{(n-m)!} \] 定义:从 n 个中选择 m 个组成有序数列,其中不同数列的数量. ...

  4. 从零开始山寨Caffe·肆:线程系统

    不精通多线程优化的程序员,不是好程序员,连码农都不是. ——并行计算时代掌握多线程的重要性 线程与操作系统 用户线程与内核线程 广义上线程分为用户线程和内核线程. 前者已经绝迹,它一般只存在于早期不支 ...

  5. NOIP2017 国庆郑州集训知识梳理汇总

    第一天 基础算法&&数学 day1难度测试 如果要用一个词来形容上午的测试,那真是体无完肤.  成绩: 题目 成绩 评价 T1 50 一般 T2 10 大失所望 T3 0 差 基础算法 ...

  6. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  7. Phrase-Based & Neural Unsupervised Machine Translation基于短语非监督机器翻译

    1. 前言 本文介绍一种无监督的机器翻译的模型.无监督机器翻译最早是<UNSUPERVISED NEURAL MACHINE TRANSLATION>提出.这个模型主要的特点,无需使用平行 ...

  8. shell脚本57问

    [1]交互方式.非交互方式.Shell脚本是什么? 经常与linux打交道,肯定对shell这个词不陌生.不明白shell意思的,可以自行翻译:外壳.去壳. 这个翻译结果怎么可以与计算机系统联系起来呢 ...

  9. 推荐书单(转自GITHUB)

    Skip to content PersonalOpen sourceBusinessExplore Sign upSign in PricingBlogSupport   This reposito ...

随机推荐

  1. TensorFlow(1):使用Docker镜像搭建TensorFlow环境

    1,关于TensorFlow TensorFlow 随着AlphaGo的胜利也火了起来. google又一次成为大家膜拜的大神了.google大神在引导这机器学习的方向. 同时docker 也是一个非 ...

  2. Exp6 20155218 信息搜集与漏洞扫描

    Exp6 信息搜集与漏洞扫描 1.DNS IP注册信息的查询 1.进行whois查询时,要去掉www,ftp等前缀,否则可能在whois服务器中查询不到: 2.使用whois查询ip的地理位置: 2. ...

  3. 实验八 Web基础

    实验八 Web基础 1.安装apache sudo apt-get install apache2 2.启动apache service apache2 start 3.使用 netstat -tup ...

  4. vue eslint报错解决办法

    若提示入下图时,在build / webpack.base.conf.js中, 找到 // const createLintingRule = () => ({// test: /\.(js|v ...

  5. mfc CTabCtrl

    知识点: CTabCtrl常用属性 CTabCtrl类常用成员函数 CTabCtrl代码示例 一.CTabCtrl控件属性 Bottom:底部样式 Vertical:垂直样式 与Bottom结合使用, ...

  6. 比较不错的Nosql文章

    1. NoSQL简单介绍 2. NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装 3. NoSQL初探之人人都爱Redis:(2)Redis API与常用数据类型简介 4. NoSQ ...

  7. 28 个 C/C++ 开源 JSON 程序库性能及标准符合程度评测

    28 个 C/C++ 开源 JSON 程序库性能及标准符合程度评测 坊间有非常多的 C/C++ JSON 库,怎么选择是一个难题. [nativejson-benchmark](https://git ...

  8. C#中二进制、十进制和十六进制互相转换的方法

    二进制在C#中无法直接表示,我们一般用0和1的字符串来表示一个数的二进制形式.比如4的二进制为"100".下面介绍C#里面用于进制转换的方法. 十进制转换为二进制(int--> ...

  9. Flask学习-前言

    前言 使用Flask断断续续加起来快一年了,但是一直没有从源码层去了解其实现原理.加上自己python基础不扎实,所以准备从看一个开源项目开始,希望能够从中窥得武功精髓,让自己水平更上一层楼. Fla ...

  10. Js_图片轮播

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...