状压dp
文章平均质量分 91
Brightess
湖南城市学院在读,大四学生
展开
-
AcWing 292. 炮兵阵地(经典棋盘式状压dp加强版)
本题是前两道题:AcWing 1064. 小国王 和 AcWing 327. 玉米田 的增强版。题意:我们打算在一张 N × M(N行M列) 的棋盘上摆放棋子,当棋盘某一格的字符为 H,表示山地(我们用 1 表示),字符为 P,表示平原(我们用 0 表示),其中只有平原才能摆放棋子,当摆放好某个棋子后,其攻击范围是 2,“横向左右各两格,纵向上下各两格”都不能再摆放棋子。问:这个棋盘上最多能摆放多少棋子?思路:设定:从 前行 往 后行 摆放棋子,我们考虑一下,对于第 i 行的摆放方案会受哪...原创 2022-03-23 00:26:27 · 228 阅读 · 0 评论 -
AcWing 327. 玉米田(棋盘式状压dp 十字形)
本题与上一题AcWing 1064. 小国王(棋盘式状压dp)几乎一致。代码:#include<bits/stdc++.h>using namespace std;const int N = 14, M = 1<<N, mod = 1e8;vector<int> state;vector<int> head[M];int g[N];int m, n;int dp[N][M];bool check(int st){ for..原创 2022-03-21 22:45:29 · 317 阅读 · 0 评论 -
AcWing 1064. 小国王(棋盘式状压dp 井字形)
题意:如题。思路:题目限制:当中间摆放了一个国王之后,其相邻的 8 个格子就不能摆放了如下图当前行用什么方式摆,只和其上一行有关系,仔细想想就可以知道,其上上行无论是什么方式摆,都影响不到当前行状态表示:f[i, j, s] 三维表示集合:所有只摆在前 i 行,当前摆放了 j 个棋子,且最后一行的状态为 s 的方案集合(s 是一个二进制的数,如果棋盘有 n 列,那么 s 即为一个 n 位的二进制数,0 表示空位,1 表示摆放了 1 个棋子)属性:Count 方案数状态计算:f[i,.原创 2022-03-21 21:25:11 · 1203 阅读 · 0 评论 -
AcWing 291. 蒙德里安的梦想(棋盘式状压dp)
题意:求把N * M(1≤N,M ≤11)的棋盘分割成若干个1*2的长方形,有多少种方案。例如当N=2,M = 4 时,共有5种方案。如下图所示:当N=2,M =3时,有3种方案。如下图所示:思路:数据范围非常小,N<=11,这提示我们可能用状态压缩dp求解。本题核心:先放横着的,后放竖着的,可以发现,当把所有横着的处理完后,竖着的就只有一种填充方案,比如下图,红色部分包含两横放的方块,剩下部分直接用竖着的方块填充即可:因此,在计算方案数的时候,我们可以统计:如果我们只放横着..原创 2022-03-18 21:41:02 · 790 阅读 · 0 评论 -
集合类状压dp:AcWing 91. 最短Hamilton路径
集合类状压dp:AcWing 91. 最短Hamilton路径原创 2022-03-17 19:03:32 · 590 阅读 · 0 评论