题目链接:https://www.acwing.com/problem/content/531/ 题目给出不超过12个点,和一些边,第一个点不用花费,其余的点都要根据深度和扩展的边长来确定花费,通过dp,将层数作为阶段,每个阶段用状态压缩记录12个点中已经走过的点,转移的过程是从j状态转移到k,这里 ...
分类:
编程语言 时间:
2020-08-01 14:36:55
阅读次数:
109
P3489:https://www.luogu.com.cn/problem/P3489 bzoj1139:https://darkbzoj.tk/problem/1139 dij 分层图最短路+状态压缩,把状态大小上限 $2p-1$ 写成了 $2-1$,然后debug了将近一晚上。。。 由于 \( ...
分类:
其他好文 时间:
2020-07-26 01:58:57
阅读次数:
90
我闷今天的目的就是通过这道题初步理解一下状态压缩类动态规划 首先我们先来介绍一下定义,所谓状态压缩类动态规划,顾名思义,这是以集合信息为状态的特殊的动态规划问题。主要有传统集合动态规划和基于连通性状态压缩的动态规划两种。 因为某些动态规划的需求信息量非常的大,并且我们为每一个信息开一维数组这样的做法 ...
分类:
其他好文 时间:
2020-07-17 13:54:46
阅读次数:
60
位运算 + 二进制表示状态 = 状态压缩DP 先把横着的小方块放好,然后剩下位置用竖着的小方块填充 然后就转化为求横着摆放小方块的方案数 按列来求 状态表示: dp[i][j]表示所有摆到了第i列,然后上一列伸出来的小方块的状态是j的情况下,总的方案数 状态转移:枚举一下i - 1列的状态 比如说当 ...
分类:
其他好文 时间:
2020-07-05 13:26:10
阅读次数:
142
总结 状压DP就是将一个状态压缩为一个整数(通常为二进制数),就可以在更为方便地进行状态转移的同时,达到节约空间的目的。 题型一、冲突问题 1.1 特殊方格棋盘 题目描述 分析 我们设f[i][j]为当前的状态为$i$,放置到第$j$行时的方案数 但是,因为我们要在$n \times n$的棋盘上放 ...
分类:
其他好文 时间:
2020-07-03 19:14:23
阅读次数:
54
参考:https://www.luogu.com.cn/blog/RPdreamer/p2051 #include<map> #include<queue> #include<time.h> #include<limits.h> #include<cmath> #include<ostream> # ...
分类:
其他好文 时间:
2020-07-03 14:05:54
阅读次数:
57
题目描述: 方法:动态规划+状态压缩 class Solution: def minNumberOfSemesters(self, n: int, dependencies: List[List[int]], k: int) -> int: dep = {} # 记录依赖于某节点的节点列表 for ...
分类:
其他好文 时间:
2020-07-01 09:44:49
阅读次数:
90
#include<bits/stdc++.h> using namespace std; //状态压缩dp,二进制法,搜索法的优化 int dp[1<<20][21],n;//最多20个点,就是20位二进制 //在状态是i,末位点是j的情况下的最小值(因为状态没有顺序信息,但是其实只需要知道末尾点即... ...
分类:
其他好文 时间:
2020-06-06 21:35:25
阅读次数:
73
题目链接 题解 这题好像不是网络流?注意到$n$最大只有20,所以可以考虑把$bug$的状态压缩成一个整数,对应位上为1代表存在这个$bug$,0表示不存在这个$bug$然后就可以根据补丁建图跑最短路就行了 查看代码 #include <bits/stdc++.h> using namespace ...
分类:
其他好文 时间:
2020-06-02 18:52:46
阅读次数:
61
本系列文章将于2021年整理出版,书名《算法竞赛专题解析》。 前驱教材是:《算法竞赛入门到进阶》(京东 当当 ) 清华大学出版社。 如有建议,请联系:(1)QQ 群,567554289;(2)作者QQ,15512356 1、引子 提到状态压缩DP时,常常用Hamilton问题作为引子。 最短Hami ...
分类:
编程语言 时间:
2020-05-30 00:59:33
阅读次数:
77