DP知识点总结4 状态压缩DP(实时更新)

一、用二进制存状态

最短Hamilton路径

https://www.acwing.com/problem/content/93/

从算法分析上来看,就是一道简单的最短路线性DP,但是既然要不重不漏地走,就需要保存已经走过的路径。此时容易想到用dfs求解(解法略)。但是对于最优化问题,无非就是要求不重不漏地枚举所有状态(或状态集),因而只要用二进制把走过的路径存起来,就可以进行状态的枚举。

二、棋盘类的状态压缩DP

玉米田

https://www.acwing.com/activity/content/problem/content/1293/1/

小国王

https://www.acwing.com/problem/content/description/1066/

解题步骤:

1.根据题目要求,筛选出所有的可能行(hang)状态,存进链表state中

2.因为行之间会有制约,所以再求出所有与各行匹配的相邻行状态,存进链表h中

3.嵌套枚举行、决策变量、当前行可能状态、当前行对应的合法的上一行状态,然后再在满足题目其它条件的情况下,对f数组进行更新。

posted @ 2021-04-30 13:26  _rhinoceros  阅读(102)  评论(0)    收藏  举报