
状压dp
IcePrincess_1968
这个作者很懒,什么都没留下…
展开
-
Codeforces GYM 101173B: Bipartite Blanket 题解
这题的大致思路肯定是左边和右边分开来枚举然后匹配匹配算一算这类的 我刚开始想的是先把完美匹配搞出来,然后在里面选点 但发现无论是选点还是找匹配复杂度都是炸的 我们开始直接考虑那些被选中的点 我们发现一些很好的性质:一个集合XXX满足题意,当且仅当它属于X的部分和属于Y的部分都能形成完美匹配 必要性是显然的,如果不存在的话就不可能有一个完美匹配能覆盖这些点 充分性想一想也挺简单的,这里就...原创 2018-04-27 10:42:02 · 400 阅读 · 1 评论 -
UVa12235: Help Bubu 题解
我们可以发现一个性质:对于所有我拿出来的数,如果剩下的数列里面还有这个数,那我可以放在它旁边,答案不变,否则就要全部放在数列最后面,答案+1 有了这个性质,我们考虑dp dp[i][j][Mask][m]表示当前考虑到第i位,已经抽出了j本书,当前最后一本保留的书是m,Mask的第i位表示的是从1~i所有的i书是否被全部抽出了 转移的话,讨论第i+1本书取还是不取 最后,对于所有的dp[n...原创 2018-04-20 23:15:58 · 390 阅读 · 0 评论 -
(权限题)NFLSoj #103: 小D的道路 题解
感觉有点像网络流,但不会搞 看到数据范围又不由得往状压dp方面想 我们可以发现,一个图是优美的,则它的形状一定是一条从1~n的链,其中链上的每个点挂着一个子图 考虑dp[Mask][i]表示当前已经将Mask中的节点加入地图,主链的末端点是i的最大边权 考虑向后转移,有两种情况: 1. 向主链的后面添加一个节点,我们可以枚举Mask之外的每个点u,看i,u之间是否有边 即dp[Mask...原创 2018-03-29 16:04:04 · 496 阅读 · 0 评论 -
TopCoder SRM194C: IslandFerries 题解
十分坑爹,题目中写的是“当你用完一张票到其他岛屿上时,你的手中只能有0,1,2张票,所以事实上任意时刻你的手上最多能有3张票 考虑状压dp dp[i][Mask]表示当前在i号岛屿,现在手上有的票为Mask的最小代价 通过船票来进行转移即可 #include <cstdio> #include <iostream> #include <cstring>...原创 2018-03-25 19:44:26 · 228 阅读 · 0 评论 -
TopCoder SRM470C: BuildingRoads 题解
斯坦纳树裸题状压dp,dp[i][j][Mask]表示当前在(i,j),当前已经在树中的节点为Mask的最小代价两种转移1. dp[i][j][Mask]=min(dp[i][j][Mask],dp[i][j][sub]+dp[i][j][Mask-sub])2. dp[i][j][Mask]=min(dp[i][j],dp[i'][j'][Mask]+score[a[i][j]]),其中(i,j...原创 2018-03-22 14:46:53 · 483 阅读 · 2 评论