题意

给出一个 \(n × m\) 大小的矩形,每个位置可以填上 \([1, c]\) 中的任意一个数,要求填好后任意两行互不等价且任意两列互不等价,两行或两列等价当且仅当对应位置完全相同,求方案数 。

\(n, m \le 5000\)

题解

这题是 Wearry 出的神题,根本不会做。。。把题解搬过来了。

首先我们有一个很简单的方式使得列之间互不等价,对于任意一列,总方案数是 \(c^n\) , 那么使得列与列之间互不相同的方案数为 \({(c^n)}^{\underline{m}}\) 。

接下来的问题只与行数有关 , 定义 \(g(n)\) 表示 \(n\) 行不保证每行互不等价的方案数 , \(f(n)\) 表示 \(n\) 行保证任意两行互不等价的方案数 , 有 :
\[
\begin{align}
g(n) &= {(c^n)}^{\underline{m}}\\
&= \sum_{i=0}^{n} {n \brace i} f(i)\\
\end{align}
\]

考虑这个式子的意义,就是枚举了有几行是不同的,然后将 \(n\) 行分成这 \(i\) 种不同的行(每个非空)的方案。

然后考虑斯特林反演就行了。(此处指不带符号的第一类斯特林数)
\[
\begin{align}
g(n) &= \sum_{i=0}^{n} {n \brace i} f(i) \\
\Leftrightarrow
f(n) &= \sum_{i=0}^{n} (-1)^{n-i} \begin{bmatrix}n\\ i\end{bmatrix} g(i)
\end{align}
\]

然后在 \(O(nm)\) 的时间里求出第一类斯特林数,就可以做完了。

其实还有更快的求法,但是对于这题原来数据没有必要。

见此博客 orz orz 生成函数大师 SunwayShichengLight 。

瓶颈在分治 \(NTT\) 处理下降幂那里,可以优化到 \(O(n \log^2 n)\) 。

总结

对于行列计算方案的题,常常可以考虑枚举一维,用容斥或者斯特林反演做。

对于另外一维可以快速计算可行的方案,来除掉一维的限制。

代码

自己写

Square(斯特林反演)的更多相关文章

  1. bzoj4671: 异或图——斯特林反演

    [BZOJ4671]异或图 - xjr01 - 博客园 考虑先算一些限制少的情况 gi表示把n个点的图,划分成i个连通块的方案数 连通块之间不连通很好处理(怎么处理看下边),但是内部必须连通,就很难办 ...

  2. 【BZOJ4671】异或图(斯特林反演)

    [BZOJ4671]异或图(斯特林反演) 题面 BZOJ Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出 ...

  3. 【BZOJ4671】(斯特林反演)

    题目 [BZOJ4671]异或图 很有意思的题 做法 直接处理显然很难,我们考虑范围扩大以求容斥或反演这类的帮助 \(f_i\)表示至少有\(i\)个联通块的方案,形如设立\(i\)个联通块轮廓,联通 ...

  4. bzoj 4671 异或图——容斥+斯特林反演+线性基

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4671 考虑计算不是连通图的方案,乘上容斥系数来进行容斥. 可以枚举子集划分(复杂度是O(Be ...

  5. bzoj 4671 异或图 —— 容斥+斯特林反演+线性基

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4671 首先,考虑容斥,就是设 \( t[i] \) 表示至少有 \( i \) 个连通块的方 ...

  6. 【bzoj4671】异或图(容斥+斯特林反演+线性基)

    传送门 题意: 给出\(s,s\leq 60\)张图,每张图都有\(n,n\leq 10\)个点. 现在问有多少个图的子集,满足这些图的边"异或"起来后,这张图为连通图. 思路: ...

  7. TCO14 Wildcard CountTables——斯特林反演

    不知道咕了多长时间的题... 讲了3遍,还是自己搞懂了.. 暂时没有找到题目链接 题意: n×m的网格,每个格子填[1,x]的数,使得不存在两行两列同构. 先保证一个,行相同. 再容斥掉列. 枚举至多 ...

  8. 斯特林数&斯特林反演

    第一类斯特林数 定义 第一类Stirling数\(s(n,m)\),也可记为\(\begin{bmatrix}n\\m\end{bmatrix}\). 第一类Stirling分为无符号第一类Stirl ...

  9. vjudge CountTables/2018雅礼集训 方阵 dp 斯特林反演

    LINK:CountTables 神题! 首先单独考虑行不同的情况 设\(f_i\)表示此时有i列且 行都不同. 那么显然有 \(f_i=(c^i)^\underline{n}\) 考虑设\(g_i\ ...

随机推荐

  1. 周末时间学习Linux

    大家都是如何度过周末时光的呢?好多人都认为一周的工作后要好好休息下,于是在家疯狂的补觉,刷剧,打游戏,自我觉得很是正常,工作几天了,休息下不是当然嘛.是的,休息下很正常,但是把周末的时光都用到这些东西 ...

  2. Atcoder E - Knapsack 2 (01背包进阶版 ex )

    E - Knapsack 2 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement The ...

  3. E: 无法打开锁文件 /var/lib/dpkg/lock-frontend - open (13: 权限不够)E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),请查看您是否正以 root 用户运行?

    一.解决方案 修改root密码,以root身份安装 sudo pwdroot root  # 输入新密码即可

  4. windows 内建环境变量

    PS C:\Windows> ls env: Name Value ---- ----- _NT_SYMBOL_PATH srv*C:\Users\vv\Documents\symbols AL ...

  5. html5 datalist 选中option选项后的触发事件

    使用input + datalist 实现自动补全功能,其中datalist中的内容是根据input输入的内容动态变换的,代码如下 <!DOCTYPE HTML> <html> ...

  6. java的强制类型转换

    java强制类型转换  详细连接https://www.cnblogs.com/kuangwong/p/6198862.html 在Java项目的实际开发和应用中,常常需要用到将对象转为String这 ...

  7. Python基础知识2-内置数据结构(下)

    bytes.bytearray #思考下面例子: a = 1 b = a print(a == b)#True print(a is b)#True print(id(a) is id(b))#Fal ...

  8. python爬虫之Gerapy安装部署

    原创北航大才:https://cuiqingcai.com/5006.html NULL:http://www.infosec-wiki.com/?p=432737

  9. Django--CRM--菜单排序等

    一 . 菜单排序 1.我们想把菜单排序.首先给菜单加上权重,权重大的排在上面, 这就要在菜单表上加上一个权重字段. 2. 我们在菜单表里面把权重改一下 3. 需要把权重字段的信息拿出来放到sessio ...

  10. 使用python库xlsxwriter库来输出各种xlsx文件

    功能性的文章直接用几个最简单的实现表达: xlsxwriter库的核心就是其Workbook对象. 创建一个指定名字的xlsx文件: import xlsxwriter filename = '/Us ...