随笔分类 -  动态规划 - 状压dp

摘要:题目大意:给定一个 N 个点的有向图,计数图上哈密顿回路的条数。 题解:哈密顿回路需要经过除了初始位置,每个点恰好一次。如果已知一条哈密顿回路的方向,那么从这条路上任意一个点出发,得到的都是同样的结果。因此,不妨设从 0 号节点出发,最后回到 0 号节点。统计答案只需要枚举最后一个点在哪个位置即可。 阅读全文
posted @ 2019-06-24 15:54 shellpicker 阅读(339) 评论(0) 推荐(0)
摘要:题目大意:给定一个长度为 N 的序列,每个位置有一个权值,现要求重新排列这个序列,使得相邻的权值差的绝对值大于 K,求合法排列的方案数。 题解: 由于 N 很小,应该可以想到状压,考虑如何进行设计状态。首先肯定要一个集合 S,其中第 i 项为 0 表示未被加入当前集合中,1 表示加入了当前的集合中。 阅读全文
posted @ 2019-06-18 19:45 shellpicker 阅读(167) 评论(0) 推荐(0)
摘要:题目大意:比较复杂,点 "这里" 看题。 题解:对于状态压缩 dp 来讲,阶段的确立十分重要。本题中,采用以层次为阶段进行状压 dp。 设状态 $f[i][S]$ 表示开凿到深度 $i$,当前已经打通的点集为 $S$ 时的最小花费。 则状态转移方程为 $$f[i][S]=min\{f[i 1][S' 阅读全文
posted @ 2019-05-02 22:50 shellpicker 阅读(151) 评论(0) 推荐(0)
摘要:题目大意:给定一个长度为 N 的序列,每个位置有一个权值,现选出一些点,满足相邻的 M 个点中至多有 Q 个点被选择,求选出点权的最大值是多少。 题解:若没有相邻的限制,这道题类似于子集和问题,即:背包问题。考虑相邻的限制,对于每个点可以记录下一个状态,代表以这个点结束,向前 M 个点的选择情况,0 阅读全文
posted @ 2019-05-02 21:50 shellpicker 阅读(133) 评论(0) 推荐(0)
摘要:题目大意:定义一个炮兵会影响该点所在坐标上下左右两个格子的范围,求一个 N\ M 的网格里最多可以放多少个炮兵。 题解:发现这个问题有需要记录两个状态,即:上一层的状态和上两层的状态,若直接进行记录,空间可能会起飞。发现对于一个合法的状态来说,需要满足一行中相邻的两个 1 必须位距离大于等于 2,且 阅读全文
posted @ 2019-03-19 08:43 shellpicker 阅读(234) 评论(0) 推荐(0)
摘要:题目大意:给定 N\ N 的棋盘,一共放 K 个国王,一共有多少种方法。 题解: `i&i using namespace std; int n,m,cnt[1 j&1)++res; cnt[i]=res; } } void solve(){ f[0][0][0]=1; for(int i=1;i 阅读全文
posted @ 2019-03-18 22:20 shellpicker 阅读(194) 评论(0) 推荐(0)
摘要:题目大意:给定一个 N\ M 的棋盘,用 1\ 2 的木条填满有多少种不同的方式。 题解:在这里采用以行为阶段进行状压 dp。到第 i 行时,1\ 1 的木块分成两类,第一类是这个木块是竖着放置木条的上半部分,第二类是其他情况。对于第一种情况来说,第 i+1 行的状态只能是 0,而对于第二种情况来说 阅读全文
posted @ 2019-03-18 21:27 shellpicker 阅读(586) 评论(0) 推荐(0)
摘要:题目大意:给定一个 N 个点的无向图,点有点权,求从 0 号点走到 N 1 号点的最短哈密顿路径是多少。 题解:由于哈密顿路径的定义是每个顶点必须经过且仅能经过一次,因此,可用当前是否经过了这些点和当前在哪个点来表示出一个状态,则一共有 $O(n2^n)$ 个状态。考虑转移方式,对于在 j 这个点的 阅读全文
posted @ 2019-03-18 16:02 shellpicker 阅读(2201) 评论(0) 推荐(0)