状压DP
文章平均质量分 58
动态规划---状压DP
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
acwing 524 愤怒的小鸟
题面 题解 一般的抛物线方程 y = ax2 + bx + c ,但是题中是要求我们从原点射出一个开口向下的抛物线,所以就要求a<0,过(0,0),把(0,0)点带入就可以得出c=0 ;因此抛物线方程为:y=ax2+bx,有两个未知数,因此两点即可确定一条抛物线。对于图中有n个点,最多有n2条抛物线,我们先求出所有不同的抛物线,及其能覆盖的所有点的集合,这样问题就变成了经典的“重复覆盖问题”,要求用最少的抛物线将所有点全部覆盖 path[i] [j] : 表示编号为i的小猪和编号为j的小猪所原创 2021-04-07 15:57:40 · 113 阅读 · 0 评论 -
acwing 292 炮兵阵地
题面 题解(状压DP棋盘模型) 状压DP棋盘模型题,对于H 山丘是不能放置意大利炮的,那么我们就可以提前预处理出山丘的位置,把山丘的位置设为二进制中的1,在最后和合法的状态进行&判断,假设01011(山丘的位置) ,然后第i行放置意大利炮的状态是00001,那么显然是不合法的,因为最后一个位置是山丘不能放置炮,所以&结果为1,就是不合法的状态 解决了这个问题,现在我们就可以看作是每一个位置都可以放置意大利炮,然后这个要求是意大利炮的上下左右两个位置不能放炮(我们用2进制的方式表原创 2021-04-06 20:49:55 · 86 阅读 · 0 评论 -
acwing 327 玉米田
题面 题解(棋盘模型) 这题是要求我们不能在数字是0的地方中玉米,还有就是上下左右相邻的位置不能种玉米,还是一样,每一行的状态只取决于上一行的状态,用二进制表示放置的状态,然后从第一行开始向下更新 对于不能种玉米的土地,我们可以提前记录其状态,然后在枚举的时候,如果是当前状态在不能种的土地上种了玉米,那么直接排除这种不合法的情况 其余步骤和小国王这道题几乎一样,可以自行参考 代码 #include<iostream> #include<cstdio> #in原创 2021-04-05 20:59:07 · 125 阅读 · 0 评论 -
acwing 1064 小国王
题面 题解(状压DP棋盘模型) 我们可以知道图中蓝色部分为国王,它的周围一圈是不能放其他国王的,那么它所影响的位置就是与他相邻的位置,我们放到每行来看,影响下一行的就是上一行国王的位置 我们用二进制来表示每行的状态 ,比如6,二进制下是(0110) 1表示的就是放置国王,0表示不放国王,我们用a表示第i,b表示第i-1行, 如图,蓝色部分放置的是国王,那红色部分一定是不能放置的,那么就要求 a & b ==0 ,还有就是每行两个国王之间肯定是不能相邻的,因为国王会影响周围的一圈,所以原创 2021-04-05 16:02:34 · 167 阅读 · 0 评论 -
acwing 91 最短Hamilton路径 (状压DP)
题面 题解 误区: 最短路问题求得是从0号点到n-1号点的最短路径,但是不需要经过每个点,只要能到达就好,此题是求Hamilton路径,要求所有点都必须经过一遍 设状态方程为 f[i] [j] 表示 在 i 状态下,从0 走到 j 的最短距离 ,我们可以以经过的倒数第二个点k为界,划分集合,那么 f[i] [j] = min( f[i] [j] ,f[i - (1 << j)] [k] + w[k] [j]) 我们枚举k,来更新方程 这里的 i 表示的是2 进制 ,比如原创 2021-03-20 10:31:29 · 164 阅读 · 0 评论 -
acwing 291 蒙德里安的梦想(状压DP)
题面 题解 代码原创 2021-03-20 08:55:50 · 212 阅读 · 0 评论