插头DP
插头DP:最小表示法
注意到每个数字互不相同。
每个数可以表示成
2
x
3
y
z
2^x3^yz
2x3yz 的形式。
z
z
z 不同的数分别是独立的子问题;对于
z
z
z 相同的数,有限制的是若干
(
x
,
y
)
,
(
x
+
1
,
y
)
,
(
x
,
y
+
1
)
(x,y),(x+1,y),(x,y+1)
(x,y),(x+1,y),(x,y+1) 的三元组,看成格点,就变成了格点涂色问题。
为了方便,将
x
,
y
x,y
x,y 分别等价翻转一下,那么每个三元组是
(
x
,
y
)
,
(
x
−
1
,
y
)
,
(
x
,
y
−
1
)
(x,y),(x-1,y),(x,y-1)
(x,y),(x−1,y),(x,y−1) ,显然可以放在轮廓线上做。
考虑涂色的贡献:令被钦定同色的格子属于一个连通块,没被钦定的单独一个连通块,设这样的连通块有
t
o
t
tot
tot 个,被钦定同色的三元组有
k
k
k 个,那么贡献是
(
−
1
)
k
m
t
o
t
(-1)^km^{tot}
(−1)kmtot 。(本质上就是令被钦定同色的格子同色,其他未被钦定的任意,做容斥。)
具体的,轮廓线时,对于一个正在考虑的各子
(
x
,
y
)
(x,y)
(x,y) ,要么新格子单独一个连通块,要么将其与三元组其他的两个格子的连通块合并,块的联通性可以用最小表示法 hash 。处理块时注意那些被封闭的块。至于
k
k
k 和
t
o
t
tot
tot ,不需要真的枚举,假设当前贡献是
r
e
s
res
res ,若新钦定了一个三元组,令
r
e
s
=
−
r
e
s
res=-res
res=−res 即可;若新封闭了一个连通块,令
r
e
s
=
r
e
s
∗
m
res=res*m
res=res∗m 即可。特别的,初始
r
e
s
=
1
res=1
res=1 。
插头DP。
[20220724NOI训练赛]T2--简要题解
于 2022-07-24 18:40:59 首次发布
这篇博客探讨了插头DP(动态规划的一种形式)在解决数字表示和格点涂色问题中的应用。通过将问题转化为2x3yz的形式,并利用最小表示法进行处理,文章阐述了如何处理限制条件并计算不同颜色组合的贡献。在处理过程中,博主提到了使用轮廓线优化策略,并讨论了连通块的概念,以及如何动态维护贡献值。博客还提及了处理封闭连通块的方法和计算总贡献的技巧,为解决这类问题提供了一种有效的方法。
3000

被折叠的 条评论
为什么被折叠?



