状压dp
GocNeverGiveUp
这个作者很懒,什么都没留下…
展开
-
状压dp位运算汇总(遇到即更新)
判断一个二进制数有几个1 方法1 : int main() { int n; int cnt = 0; scanf("%d",&n); while(n) { if(n & 1) cnt++; n >>= 1; } cout<<cnt<<endl; ...原创 2018-08-09 16:17:10 · 435 阅读 · 0 评论 -
POJ 1185 炮兵阵地(简单状压dp)
一道简单的状压dp看了别人的思路还做了好久,有那么一段时间很绝望,哎 POJ - 1185 和poj3254很像的一道题,设平原为1山地为0,第i行只和i-1与i-2行状态有关,所以我们开一个三维数组dp[i][j][k]表示第i行为状态k,第i-1行为状态j时的情况,首先预处理,同一行的1中间最少隔两个0,这个运用位运算很容易实现,再就是计算合理的情况中,每一种情况中有几个位置可以放炮台,就...原创 2018-08-09 19:27:49 · 179 阅读 · 0 评论 -
POJ 3311 Hie with the Pie(简单处理的状压dp)
POJ - 3311 这道题,我还是不会!只能看题解才维持得了生活 思路 : 利用二进制数串保存行走情况,由小到大逐步dp更新最优解,提前用floyd打好两点之间最短路的表,从每一个点开始遍历每一种状态,由于我们更新的是0-(1<<n-1),最后还差一个 0,也就是返回起点。 没事的时候自己敲几遍状压dp,不信掌握不了!!! #include<iostream> ...原创 2018-08-09 20:57:11 · 135 阅读 · 0 评论 -
ZOJ 3471 Most Powerful (简单状压dp)
ZOJ - 3471 这道题超级简单了,不会说不过去了,但还是手生,wa了好几遍,最后才想到bug在哪里 思路 : 将没爆的气球标记为0,爆了的标记为1,这个思路在上一道最短路状压的题里看到过,很容易想到了,最后必然是仅剩下一个气球没有爆,即最后的二进制串里仅仅剩下一个为0. 基本上很暴力的解法了,将每一种可能解都求出来,最后拼成最优解,但是状态压缩了,所以会快点 状态转移方程 : 既然...原创 2018-08-10 16:10:29 · 161 阅读 · 0 评论 -
POJ 3254 Corn Fields(状压dp学习篇)
题目链接 之前有看过状压dp的教学视频,讲的太烂了,这次找到一个良心博主,讲的很好,算是入门状压dp了 传送门 : 状压dp入门 状态压缩dp,这道题是把0,1转化成二进制数,再用十进制数表示,通过位运算实现问题的解决,解题过程趋于暴力,但由于状态进行了压缩所以并不会很慢,其解题过程更像是一个递推过程,从上往下将每一种可能的情况计算并保留,当然要先初始化第一行,剩下的就是递推了,博客里讲的很...原创 2018-08-08 20:25:07 · 105 阅读 · 0 评论