组合数学入门—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的更多相关文章

  1. [BZOJ2111]:[ZJOI2010]Perm 排列计数(组合数学)

    题目传送门 题目描述 称一个1,2,...,N的排列${P}_{1}$,${P}_{2}$,...,${P}_{N}$是Magic的,当且仅当2≤i≤N时,${P}_{i}$>${P}_{\fr ...

  2. [BZOJ2729]:[HNOI2012]排队(组合数学)

    题目传送门 题目描述 某中学有n名男同学,m名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) ...

  3. P5689 多叉堆

    写在前面 OI 生涯中 AC 的首道组合数学应用题. 开题 5min 发现规律,写了半下午代码,调了两天,然而甚至没过样例,心态崩了.几天之后重新写了一份代码才 AC. 虽然思维难度不大,但毕竟是联赛 ...

  4. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  5. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  6. ACM入门步骤(一)

    一般的入门顺序: 0. C语言的基本语法(或者直接开C++也行,当一个java选手可能会更受欢迎,并且以后工作好找,但是难度有点大),[参考书籍:刘汝佳的<算法竞赛入门经典>,C++入门可 ...

  7. ACM基础算法入门及题目列表

    对于刚进入大学的计算机类同学来说,算法与程序设计竞赛算是不错的选择,因为我们每天都在解决问题,锻炼着解决问题的能力. 这里以TZOJ题目为例,如果为其他平台题目我会标注出来,同时我的主页也欢迎大家去访 ...

  8. ACM入门指南

    本文已经转移到了:http://harryguo.me/2015/11/03/ACM-%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/ 什么是ACM? 想必打开这篇博客的人已 ...

  9. 数位dp总结 之 从入门到模板

    转发自WUST_WenHao巨巨的博客 基础篇 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听 ...

随机推荐

  1. Net Transport

    在调用第三方请求时,正确使用Client也不是一件非常容易的事. 下面是截取的一段描述,建议Client或Transport在整个服务期间最好是全局单例的,Transport本身会维护连接的状态,而且 ...

  2. 2019-8-30-C#-从零开始写-SharpDx-应用-笔刷

    title author date CreateTime categories C# 从零开始写 SharpDx 应用 笔刷 lindexi 2019-8-30 8:50:0 +0800 2019-6 ...

  3. PHP:测试SQL注入以及防止SQL注入

    在写登录注册的时候发现了SQL和JS注入这个危害网站的用户举动: 测试方法: SQL注入: 先来做一个测试: 用户名:’ or 1 # 密码:随便写8位以上 验证码:写正确 好吧,就那么简单就进去了: ...

  4. [React Native]升级React Native版本

    React Native正式版本还没发布,但是小版本基本上每个月都更新1-2次.9月11号又更新了0.33版本,其中有两个增强功能正好是项目中用到的. 添加Android6.0权限验证API Add ...

  5. wepy ——$apply

    1.说明 在异步函数中更新数据的时候,必须手动调用 $apply 方法. 2.代码和效果 // html <button type="primary" plain=" ...

  6. python 字符串(str)

  7. ural 1519 Formula 1(插头dp)

    1519. Formula 1 @ Timus Online Judge 干了一天啊!!!插头DP入门. 代码如下: #include <cstdio> #include <cstr ...

  8. Python基础10 回顾

    从最初的"Hello World",走到面向对象,该回过头来看看,教程中是否遗漏了什么. 我们之前提到一句话,"Everything is Object".那么 ...

  9. Serverless助力AI计算:阿里云ACK Serverless/ECI发布GPU容器实例

    ACK Serverless(Serverless Kubernetes)近期基于ECI(弹性容器实例)正式推出GPU容器实例支持,让用户以serverless的方式快速运行AI计算任务,极大降低AI ...

  10. win10如何关闭计算机设备和驱动器非硬盘图标

    按win键+R,打开注册表regedit,找到这个路径: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\My ...