Gravatar
yrtiop
积分:2109
提交:311 / 811

学习 Hiengon 大神,开头应该有一句原神语录或者日文歌词,但是我不玩原神,也不是罕见,所以略过。

个人感觉,其实这题的重点不在后面的多项式优化,而在这个容斥系数的推导。这其实展示了一类不太平凡的容斥系数的通用推法。

这个题解本身就是复读论文,后面加点自己的理解。

首先最终的式子是 $f_i = \sum\limits_{0<j<i} f_{i-j}\mathrm C_{i}^{j} 2^{j(i-j)} (-1)^{j-1}$,重点在于那个 $(-1)^{j-1}$ 从哪来。

首先我们有最基本的容斥:

$$g(S) = \sum_{T\subseteq S} f(T)\\f(S) = \sum_{T\subseteq S} (-1)^{|S|-|T|}g(T)$$

可以看作 $\sum\limits_{i=0}^n (-1)^i \mathrm C_{n}^{i}=[n=0]$ 的外在表现,具体的组合双射得参考上面这个的(不知道有没有就是了),反正我不会。这个式子集合关系反过来也是对的,下面要用。

然后我们思考这个题咋做。设 $f(i,S)$ 表示 $i$ 个点,目前零度点集合 恰好 为 $S$ 的方案数,$g(i,S)$ 表示 $i$ 个点,钦定 $S$ 内部均为零度点的方案数。显然有:

$$g(n,S)=\sum_{S\subseteq T} f(n,T)\\f(n,S)=\sum_{S\subseteq T} (-1)^{|T|-|S|} g(n,T)$$

现在我们要算 $g(n,\emptyset)$,直接开始大力推式子:

$$\begin{aligned}g(n,\emptyset) & = \sum_{m=1}^n \sum_{|T|=m} \sum_{T\subseteq S}(-1)^{|T|-|S|} g(n-|S|,\emptyset) 2^{|S|(n-|S|)}\\& = \sum_{S\neq \emptyset} g(n-|S|, \emptyset) 2^{|S|(n-|S|)} \sum_{m=1}^{|S|} (-1)^{|S|-m} \mathrm C_{|S|}^{m}\\& = \sum_{j=1}^{n} g(n-j,\emptyset) \mathrm C_{n}^{j} 2^{j(n-j)} (-1)^{j-1}\end{aligned}$$

每行都解释一下:第一行就是大力展开递推式,第二行交换求和顺序,第三行枚举 $|S|$ 大小直接算,后面那个 $(-1)^{j-1}$ 其实是凑了个 $m=0$ 化二项式定理,然后再减回去。

于是我们就得到了这样一个容斥系数。事实上引起我注意的是最上面的那个最基本的容斥式子,经过之前和 DarkMoon 大神的讨论,发现其实莫反,二项式反演都可以从这个直接理解。

好了,你已经学会有标号 DAG 计数的方法了,快去试试切掉 联合省选2024 d2t2 吧!



题目2353  [HZOI 2015] 有标号的DAG计数 I      5      评论
2024-06-22 16:18:57    
Gravatar
1nclude
积分:326
提交:159 / 584
×

提示!

该题解未通过审核,建议分享者本着启发他人,照亮自己的初衷以图文并茂形式完善之,请勿粘贴代码。
dfs意义:从x过来的最小值 记忆化dfs定义f数组存储结果 //dfs函数 long long int dfs(int x,int lwalk,int rwalk) { if(f[x][lwalk][rwalk]!=0x7f7f7f7f7f7f7f7f) return f[x][lwalk][rwalk]

........................................................................

该题解等待再次审核

........................................................................(剩余 820 个中英字符)

题目3979  篮球 AAAAAAAAAAAAAAAAAAAA
2024-06-22 03:56:21    
Gravatar
小金
积分:1875
提交:309 / 580

一个妙妙思路

将棋子按位置从小到大排序后一对一对看,如1 2 3 4,[1,2]为一对,[3,4]为一对

每对中左边的那个棋子如果往左移了几步,右边的棋子也移动相同的步数,对结果没有影响;但如果右边的棋子往左移,就会对结果有影响,右边的棋子最多移动到左边棋子的右边1格的位置

所以其实只需要维护每对石子之间的距离,类似Nim游戏,当每一对石子相差1时无法移动

如果给定的n为奇数,则多加入一个位置为0的点,与最小的那个为一对


题目2660  [POJ 1704]格鲁吉亚和鲍勃 A      4      评论
2024-06-07 16:01:06    
Gravatar
石页嘉
积分:5
提交:3 / 26
×

提示!

该题解未通过审核,建议分享者本着启发他人,照亮自己的初衷以图文并茂形式完善之,请勿粘贴代码。
                  #include<bits/stdc++.h>        using namespace std;              

........................................................................

该题解等待再次审核

........................................................................(剩余 947 个中英字符)

题目3979  篮球
2024-05-28 20:36:09    
Gravatar
op_组撒头屯
积分:3060
提交:341 / 681

这不是一篇题解,只是偶然发现大多数提交的复杂度都是错的。

其实只是少了一个剪枝:对所有搜索得到的二元组 $(state,sum)$ 去重。

以下记 $N=2n$。

如果不去重,考虑一组数据满足 $a_i=1$。此时前一半中 $sum=i$ 的状态有 $[x^i](1+x+x^{-1})^n=[x^{i+n}](1+x+x^2)^n$ 个,记作 $f_i$。

由于我们是对于每一个后一半的状态,遍历所有前一半与之相等的状态,那么总遍历量为 $\sum_i{f_i^2}$。查一下 OEIS 发现,这个东西是 $O(\frac{3^{2n+0.5}}{2\sqrt{2\pi n}})$ 也就是 $O(\frac{3^{N+0.5}}{2\sqrt{\pi N}})$ 的,其实不比 $O(3^N)$ 的暴力优多少,证明在link

然而如果去重了,一个粗略的上界是,对于后一半的 $3^n$ 个状态,前一半中最多有 $2^n$ 个状态与之对应,那么就是 $O(6^{\frac{N}{2}})$ 的。此时也能看出,某谷上一堆说复杂度是 $O(3^{\frac{N}{2}})$ 的题解全是瞎扯。

值得注意的是,官方其实还给出了一种 $(1+\sqrt{1.5})^N$ 的做法,奈何我英语不好看不懂。链接是link


题目769  [USACO Open12] 平衡奶牛子集      8      评论
2024-05-26 17:28:36    
Gravatar
yrtiop
积分:2109
提交:311 / 811

发现最难受的是每行必须选最大值,不好统一刻画。

但是我们可以直接转化这个问题:泛化为从每行选一个数,求最大可能值。不难发现这样答案不会变化。

于是可以状压 dp,$f(i,S)$ 表示处理完前 $i$ 列,目前 $S$ 中为 $1$ 的行已经选上数的最大可能值。

转移直接枚举循环位移,然后枚举子集转移即可。$\mathcal O(Tmn3^n)$。

再做一些最优性的分析,加以预处理,可以做到 $\mathcal O(T(m\log m + n^32^n + n3^n))$。


题目3249  Rotate Columns      7      评论
2024-05-24 16:45:08