首先感谢LadyLex的插头DP:从零概念到入门,让我对插头DP的理解更进了一步。本文部分内容/图片也转录于此。
概述
插头DP主要用来处理一系列基于连通性 1 _{1} 1状态压缩 2 _{2} 2 的动态规划问题,处理的具体问题有很多种,并且一般数据规模较小。
插头DP在棋盘模型上的应用最广泛,非常考察思维的严谨性和全面性。
在基本的模板(哈希/DP结构)的基础上,插头的变换和衔接成为了问题的关键。
基本方式
状态确定
插头
在插头DP中,插头表示一种联通的状态,以棋盘为例,一个格子有一个向某方向的插头,就意味着这个格子在这个方向已经与外面相连(表示两个相邻格子之间已经格子联通)。
前驱状态对应的插头必须接上,同时考虑接下来插头的走向。
逐格递推
对于第 i i i行第 j j j列的格子 ( i , j ) (i,j) (i,j):走向它的方案,可能由上一行的下插头转移而来,也可能是本行的右插头转移而来。
一如轮廓线DP,插头 D P DP DP用状态压缩的方式记录处理当前格时最近一排已决策格子的插头情况。具体而言: 1 1 1~ j − 1