组合数学入门—TwelveFold Way
组合数学入门—TwelveFold Way
你需要解决\(12\)个组合计数问题。
\(n\)个有标号/无标号的球分给\(m\)个有标号/无标号的盒子
盒子有三种限制:
A、无限制
B、每个盒子至少有一个球
C、每个盒子至多有一个球
共有\(2\times2\times3=12\)种问题:

为了方便 将有标号记为L(labelled) 无标号记为U(unlabelled)
那么一个问题可以用缩写代替,如ULA表示\(n\)个无标号的球分给\(m\)个有标号的盒子,一共有多少种方案。
现在你的任务是,给定问题的缩写和\(n,m\),求方案数对\(998244353\)取模后的值。
LLA
这个很明显答案是\(m^n\),每一个球有\(m\)种选择
LLB
发现这个条件不好满足,考虑容斥,每次强制枚举\(i\)个盒子里面没有球
\[
ans = \sum_{i = 0}^m\binom{n}{i}(m - i)^n
\]
LLC
我们发现,因为要求球全部放入盒子,所以当\(n > m\)肯定无解
否则答案就是
\[
\binom{m}{n}\times n!
\]
看看那几个盒子里面有球,并且因为球是不同的,所以要再乘上排列数
LUB
发现LUB和LLB的区别就是其实就是\(\{1,2,3\},\{4,5\}\)和\(\{4,5\}\),\(\{1,2,3\}\)看做一种
那么我们直接把LLB的答案除以\(m!\)即可
这就引出了我们要介绍的东西,第二类斯特林数
第二类斯特林数,记为\(S\),\(S_n^m\)表示把\(n\)个有标号的球放到\(m\)个无标号的盒子里面的方案数
我们可以比较简单的理解第二类斯特林数的递推公式
\[
S_{n}^m = S_{n - 1}^{m - 1}+ m\times S_{n - 1}^m
\]
每次新开一个盒子放\(i\)或者是放入之前的任何一个集合之中
LUA
我们既然知道了LLB的答案,直接枚举多少个盒子放了球
\[
ans = \sum_{i = 1}^mS_{n}^i
\]
到此为止我们可以发现一个奇妙的性质A和B是知一推一的,有无标号仅仅通过乘组合数推出来
LUC
这就是比较水的了,直接判断能否放下,放得下就是\(1\)
ULB
经典插板法的模型,ULB也可以在做是这样一个方程的正整数解的个数
\[
x_1+x_2+x_3+\dots +x_m = n
\]
那么我们看做这样\(n\)的球插入\(m - 1\)的版子.分割成\(m\)部分的方案数
所以方案数就是
\[
\binom{n - 1}{m - 1}
\]
ULA
我们继续上面的方程
设\(y_i = x_i+ 1\)
也就是我们现在要解决这个方程的正整数解的个数
\[
y_1+y_2+\dots+y_m = n+m
\]
同理,可以知道是
\[
\binom{n + m - 1}{m - 1}
\]
每一组\(y\)都对应着唯一一组\(x\)(因为\(x\)和\(y\)的关系是确定的)
ULC
首先,\(n > m\)肯定无解,接下来只需要考虑\(n\le m\)
否则答案就是\(\binom{m}{n}\)
UUC
同LUC
UUB
这个不能通过ULB除以\(m!\)得到
因为ULB中我们尽管盒子不同,但是球是相同的,所以我们会把\(\{2,3,3\}\)和\(\{2,3,3\}\)看做同一种方案,所以直接除以\(m!\)的前提是上面的例子被看做不同方案,否则就没有排列一说
那我们设\(P_{i,j}\)表示\(i\)个无标号的球分到\(j\)个有标号的盒子里的方案数
为了保证不会重复计数,我们强制盒子的球数目不增
转移要么把新球新开一个盒子,要么在前面所有盒子都放一个球
\[
P_{i.j} = P_{i - 1,j - 1} + P_{i - j,j}
\]
转移边界有\(P_{0,0} = 1\)
这其实就是划分数
UUA
首先,我们可以采用老套路,暴力枚举有多少个盒子中放球
\[
ans = \sum_{i = 1}^m P_n^i
\]
另外类似于ULA的思路,我们发现答案其实是\(P_{n + m}^m\)
组合数学入门—TwelveFold Way的更多相关文章
- [BZOJ2111]:[ZJOI2010]Perm 排列计数(组合数学)
题目传送门 题目描述 称一个1,2,...,N的排列${P}_{1}$,${P}_{2}$,...,${P}_{N}$是Magic的,当且仅当2≤i≤N时,${P}_{i}$>${P}_{\fr ...
- [BZOJ2729]:[HNOI2012]排队(组合数学)
题目传送门 题目描述 某中学有n名男同学,m名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) ...
- P5689 多叉堆
写在前面 OI 生涯中 AC 的首道组合数学应用题. 开题 5min 发现规律,写了半下午代码,调了两天,然而甚至没过样例,心态崩了.几天之后重新写了一份代码才 AC. 虽然思维难度不大,但毕竟是联赛 ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- ACM入门步骤(一)
一般的入门顺序: 0. C语言的基本语法(或者直接开C++也行,当一个java选手可能会更受欢迎,并且以后工作好找,但是难度有点大),[参考书籍:刘汝佳的<算法竞赛入门经典>,C++入门可 ...
- ACM基础算法入门及题目列表
对于刚进入大学的计算机类同学来说,算法与程序设计竞赛算是不错的选择,因为我们每天都在解决问题,锻炼着解决问题的能力. 这里以TZOJ题目为例,如果为其他平台题目我会标注出来,同时我的主页也欢迎大家去访 ...
- ACM入门指南
本文已经转移到了:http://harryguo.me/2015/11/03/ACM-%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/ 什么是ACM? 想必打开这篇博客的人已 ...
- 数位dp总结 之 从入门到模板
转发自WUST_WenHao巨巨的博客 基础篇 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听 ...
随机推荐
- kibana一直弹出来报错?
1,这个我们需要授权 2.授予安全
- 信息摘要算法 MessageDigestUtil
package com.xgh.message.digest.test; import java.math.BigInteger; import java.security.MessageDigest ...
- oracle编写分页过程
有了上面的基础,相信大家可以完成分页存储过程了,要求,请大家编写一个存储过程,要求可以输入表名.每页显示记录数.当前页.排序字段(deptno降序).返回总记录数,总页数和返回结果集. 把一个字符串, ...
- LA4094 WonderTeam
杯哥题解. //Serene #include<algorithm> #include<iostream> #include<cstring> #inclu ...
- bzoj4033 树上染色
Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距 ...
- 介绍配置管理工具SVN的使用
配置管理CM(Configuration Mangerment) 一.配置管理工具SVN的介绍 ---Subversion ---是一个开放源代码的版本控制系统 ---时下流行的SVN和GIT 每天开 ...
- spring-data-jpa实体类继承抽象类如何映射父类的属性到数据库
在抽象父类上加上注解@MappedSuperclass @MappedSuperclass public class Pet { private Integer id;//id private Str ...
- GIAC2019 演讲精选 | 面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码
一直以来, 如何从‘视觉稿’精确的还原出 对应的UI侧代码 一直是端侧开发同学工作里消耗比较大的部分,一方面这部分的工作 比较确定缺少技术深度,另一方面视觉设计师也需要投入大量的走查时间,有大量无谓的 ...
- vuex之仓库数据的设置与获取
如果你之前使用过vue.js,你一定知道在vue中各个组件之间传值的痛苦,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新,那么接下来我们就来学习 ...
- IDEA-创建WEB项目并部署Tomcat
一.创建简单web项目 1.创建一个web project File -> new Project ->选择project sdk 为1.6(如果没有sdk的同学请先配置)-> Ne ...