最近做完一个状压专题,写一写个人总结。
首先,我暂时接触啦三种大致解题套路。
一、按照一个顺序遍历完一些点,求最值如HDU1074 的作业,按照哪一种顺序做使扣分最少,用二进制记录当前已经访问过的点,然后进行状态转移。还有就是如CF8c的,从起点去一些地方拿东西,每次最多两个,求最小权值,这个是没有顺序的,直接用二进制记录当前状态能达到的最小权,转移方程也不难得到。
二、记录状态,两个状态转移之间是否互斥,像POJ的1185炮兵阵地,HDU4583郑厂长的排兵布阵,状压作用主要是记录地形状态(每一行哪几个位置可以放物品),和状态转移过程需要用到的当前这一行的放置状态,以及下一行的将要转移的状态。这样就大大节省啦转移过程消耗的时间。主要求最多能排多少,和排一些的种类数(题目:HDU1565方格取数,POJ3254种玉米,HDU4529N骑士问题 HDU - 1820 N主教问题 SGU132的N国王问题)
三,轮廓线DP,我接触的问题大都是在一个矩形方块里能放多少瓷砖(各种瓷砖)的方案数,简单的只有1*2一种瓷砖的的用简单的11表横放,01表竖放的,要用dfs求转移的状态。瓷砖比较复杂的,就不能用01表示竖直放置的。用1表示放置,0表示未放置,放置当前层会影响到下一层的放置,用dfs求解状态,而且还要记录对下一层的影响。(题目:LightOJ - 1270 码瓷砖 SGU - 132 放巧克力)