都是数学题

思维最重要,什么什么数都没用,DP直接乱搞(雾..

参考LH课件,以及资料:http://daybreakcx.is-programmer.com/posts/17315.html

做到有关的题目会更新


n个乒乓球放到m个盒子里的方案数

1.球相同,盒子不同,不允许空

分成m段,n-1个空选m-1个放隔板 ,$\binom{n-1}{m-1}$

2.球相同,盒子不同,允许空

$(1)$ 加入m个球变成不允许空

$(2)$ m-1个隔板和球放在一起,从中选m-1个做隔板

$C_{n+m-1}^{m-1}$

3.球相同,盒子相同,不允许空

就是整数划分问题啊...n个数写成m个数的和的形式的方案数

$ f[i][j]=f[i-1][j-1]+f[i-j][j] $

有1的话就是$ f[i-1][j-1]$,没有1的话就拿出j个1先放上再分剩下的,$f[i-j][j]$

或者直接写暴力转移然后化简

4.球相同,盒子相同,允许空

$ \sum_{j=1}^mf[n][j] $

5.球不同,盒子相同,不允许空

第二类Stirling数:n个不同的元素分成m个集合的方案数

$ S(i,j)=S(i-1,j-1)+S(i-1,j)*j $

$ S(n,n)=1 \quad n \ge 0\quad,\quad S(n,0)=0 , n\ge 1$

考虑一个元素可以放入一个空集合或者已经有元素的集合(j种选择)

6.球不同,盒子相同,允许空

枚举非空盒子数量

$ \sum_{j=1}^mS(n,j) $

7.球不同,盒子不同,不允许空

盒子全排列标号就行了

$S(n,m)*m!$

8.球不同,盒子不同,允许空

不能简单的全排列标号,因为空盒子标号没有意义

所以枚举非空盒子数量的时候乘上个组合数和全排列标号

$ \sum_{j=1}^m{S(n,j)*C_{m}^{j}*j!} $


n个球选m个,不能选相邻的

拿出球后会留下空

把选的拿出来,剩下n-m个球n-m+1个空(包括两端),再把拿出来的m个插到空里去

$ C_{n-m+1}^{m}$


把n颗珍珠,穿成m个项链,旋转后相同的项链是一种项链。珍珠不同,项链相同。

第一类Stirling数:n个不同元素构成m个圆排列的方案数

$ s(i,j)=s(i-1,j-1)+s(i-1,j)*(i-1) $

$ s(n,n)=1 \quad n \ge 1\quad,\quad s(n,0)=0 $

考虑一个元素可以放入一个空排列或者某一个元素后面(i-1种选择)


Catalan数

[总结]:

1.卡特兰数的一个特点是问题有n点,选择某一点后分成两个子问题,两个字问题互相独立

2.或者可以直接往原始定义方向建模:每一步有两种决策,规定任意时刻一种决策数量不能超过另一种

[通项公式]:

$ C_n = \frac{1}{n+1}{2n\choose n} \quad n\ge 0 \quad C_0 = 1 \quad C_1=1$

$1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670...$

[公式变形]:

$1\quad C_n = {2n\choose n} - {2n\choose n+1} \quad$

$2\quad C_n = \frac{4n-2}{n+1} C_n-1 $

$3\quad C_{n} = \sum_{i=0}^{n-1}C_{i}*C_{n-i-1}\quad$

[应用]:

原始:n个+1和n个-1构成2n项$a_i$,其部分和满足$a_1+a_2+...+a_k \ge 0\quad , 0 \le k\le 2n $的序列个数等于第n个Catalan数。

证明:不合法的有${2n\choose n+1}$个,考虑第一个不合法位置$k$一定是$-1$,$1...k$正负互换后得到的序列有$n+1$个$+1$,$m-1$个$-1$,这些都是不合法的要减去

$1$ 合法括号序列方案数

  考虑$( +1\quad  ) -1$

$2$ $n$个节点二叉树形态数

  考虑根的左孩子和右孩子节点数

$3$ 在网格中从$(0,0)$走到$(n,n)$,只能向上或向右走,不能跨过$y=x$这条直线,方案数。

  法1.枚举第一次走到$y=x$的位置

  法2.一共走了$2n$次,向右 $+1$ ,向上 $-1$

$4$ 凸n边形切三角剖分(分成$n-2$个三角形)方案数

  枚举三角形$1nj$的$j$,分成了两个多边形,乘法原理$f[i]=f[j]*f[n-j+1]$,这里的Catlan数列从$f[3]$开始,考虑整体$-2$后变成标准形式

$5$ n个数入栈后的出栈的排列方案数

  法1.枚举最后出栈的元素,小于他的和大于他的独立,乘法原理

  法2.一共$2n$次操作,入栈$+1$,出栈$-1$

$6$ n层的阶梯切割为n个矩形的方案数

n层阶梯有n个角,切割后每个矩形都占有一个角,一定有一个矩形占有左上角,然后分成了两个互相独立的子问题...

[一个变形]:

$+1$有$n$个,$-1$有$m$个,$n \ge m$,求方案数

和原始版本的证明思路相同,第一个不合法前面正负互换之后还是$n+1$个$+1$,方案数还是

$1\quad C_{n+m} = {{n+m}\choose n} - {{n+m}\choose n+1} \quad$

$7$ BZOJ 1485: [HNOI2009]有趣的数列

整理一点与排列组合有关的问题[组合数 Stirling数 Catalan数]的更多相关文章

  1. 卡特兰数 Catalan数 ( ACM 数论 组合 )

    卡特兰数 Catalan数 ( ACM 数论 组合 ) Posted on 2010-08-07 21:51 MiYu 阅读(13170) 评论(1)  编辑 收藏 引用 所属分类: ACM ( 数论 ...

  2. codeforces 429 On the Bench dp+排列组合 限制相邻元素,求合法序列数。

    限制相邻元素,求合法序列数. /** 题目:On the Bench 链接:http://codeforces.com/problemset/problem/840/C 题意:求相邻的元素相乘不为平方 ...

  3. [leetcode] 题型整理之排列组合

    一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...

  4. iOS多线程中,队列和执行的排列组合结果分析

    本文是对以往学习的多线程中知识点的一个整理. 多线程中的队列有:串行队列,并发队列,全局队列,主队列. 执行的方法有:同步执行和异步执行.那么两两一组合会有哪些注意事项呢? 如果不是在董铂然博客园看到 ...

  5. 排列 && 组合

    最近编程经常遇到需要 排列&&组合(求子集) 的问题:遂整理一下. 1. 数字的排列与组合(递归):O(n!),O(nC(n,k)) * O(n) #include <stdio ...

  6. LeetCode OJ:Combinations (排列组合)

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  7. 学习sql中的排列组合,在园子里搜着看于是。。。

    学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...

  8. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...

  9. 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

随机推荐

  1. The Blocks Problem(vector)

    题目链接:http://poj.org/problem?id=1208 The Blocks Problem Time Limit: 1000MS   Memory Limit: 10000K Tot ...

  2. C语言中结构体赋值问题的讨论(转载)

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  3. Linux驱动手动绑定和解绑定

    Linux内核从2.6.13-rc3开始,提供了在用户空间,可动态的绑定和解绑定设备和设备驱动之间关系的功能.在这之前,只能通过insmod(modprobe)和rmmod来绑定和解绑,而且这种绑定和 ...

  4. java序列化反序列化深入探究

    When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...

  5. 利用JAVA API远程进行HDFS的相关操作

    学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...

  6. 修真院java后端工程师学习课程--任务1(day one)

    这是我从学习资料-线下报名-北京报名截取的报名截图,从图中我们可以看出我们的报名对象应该有姓名,qq,修真类型,预计入学时间,毕业院校,线上学号,日报链接,立愿,辅导师兄等属性,其中线上学号是主码. ...

  7. Asp.net mvc 中Action 方法的执行(一)

    [toc] 在 Aps.net mvc 应用中对请求的处理最终都是转换为对某个 Controller 中的某个 Action 方法的调用,因此,要对一个请求进行处理,第一步,需要根据请求解析出对应的 ...

  8. CCF系列之相反数(201403-1)

    试题名称: 相反数 试题编号: 201403-1时间限制: 1.0s 内存限制: 256.0MB 问题描述 有 N 个非零且各不相同的整数.请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对 ...

  9. Failed to load the JNI library "E:\JDK6.0\bin\client\jvm.dll"

    在打开Eclipse是错误提示:Failed to load the JNI library "E:\JDK6.0\bin\client\jvm.dll" 如图1所示 图1 遇到这 ...

  10. Oracle实战笔记(第七天)之PL/SQL进阶

    一.控制结构 控制结构包括:判断语句(条件分支语句).循环语句.顺序控制语句三种. 1.条件分支语句 if--then:简单条件判断 --编写一个过程,可以输入一个雇员名,如果该雇员名的工资低于200 ...