解题报告-论对“整体计数”的新理解
解题报告-论对“整体计数”的新理解
这道题是一个整体计数的例子。
本题中,我们不能在序列上设置任何的状态,因为只有选完了 \(1\sim n\) 的所有数,方案才是合法的,除非我们设置状态为 \(f_{l,r,S}\) 为区间 \(l,r\) 中已经选的集合为 \(S\) 的合法方案数。当然这是 \(O(n^22^n)\) 的。
所以我们来一步一步转化这个问题。开始的时候,我把这个问题反过来想,因为选取所有卡片总是合法的,所以我们要删去一些卡片。再反过来,删去卡片什么时候不合法?就是把写有同一个数字的一张或两张卡片全删了。那么我们向写有同一个数字的两张卡片连边,把原题转化为一个个连通块。
提取关键词:连通块。既然我们无法在序列上 \(dp\),那为何不在连通块上做呢?而且,我们可以剖析一下为什么这个计数是“整体”的,那不就是因为它有依赖关系吗?依赖关系不就是连通块吗?
那么我们来到下一步。我们观察到,在这道题中一个点度数最多为 \(2\),所以最后炼成的连通块一定是一个点,两个点,或者一个环。对于一个点,删除的方案数只能是 \(1\),也即不删;对于两个点方案数是 \(3\)。
对于一个环呢?假设我们已经选定了一个点 \(A\) 要删去,那么与 \(A\) 相邻的两个点 \(B,C\) 是不能删去了,把这三个点和为一个点,一个空点,那么 \(f_i\) 由 \(f_{i-2}\) 转移过来。
那么要是 \(A\) 不被删去呢?\(B\) 和 \(C\) 可以任意选择是否被删去,再把 \(A\) 和 \(B\) 合在一起,就是一个 \(n-1\) 元环了,所以 \(f_i\) 也由 \(f_{i-1}\) 转移而来。
提取关键词:连通块上的状态转移。
综上所述:整体计数有两个关键点,第一个是要把一条条限制关系转化为连通块,第二个是要对连通块的大小进行 \(dp\)。为什么是连通块的大小?就像本题一样,大多数整体计数题都只有给定条限定关系,所以确定了连通块的大小基本就确定了连通块的形态。