状态压缩
文章平均质量分 51
。十二。
这个作者很懒,什么都没留下…
展开
-
【洛谷 P2831】 愤怒的小鸟【状态压缩】
解题思路预处理一个 st[i][j] 表示经过 i,j 两点的抛物线能经过的所有点的集合,具体做法就是枚举出两个点,分别算出对应的a,b,然后再枚举点,判断是否再当前线上出现过。如何求a,b:设dp[S]表示以被消灭的状态为S时,需要多少只鸟。一个奇妙的初始化v[i]v[i]v[i],存的是是iii这个状态内第一个0的位置,也就是我们做dp的起始位置。首先,我们开始操作的点是start[i],我们先将它预先转移一下,s=start[i],假设s这头猪被打掉的状态等于i被打掉的状态的最...原创 2021-10-05 21:04:53 · 158 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day4】D. 沿桥旅行【Dijk+堆优化】【状压】
解题思路我们先预处理出所有桥包含的端点,全部跑一遍最短路。由于k很小,很容易想到状压,然后想压什么?压边还是压点,压边我们只有最多12条边,只需要2^12次方的状态,而压点我们最多可能有24个点,状态太多,所以我们只能选择压边。设f[u][S]f[u][S]f[u][S] 表示当前在u点,已经经过的桥的集合为S。然后转移只需要考虑最后在桥的哪一个点即可,即设桥有两点为u和v,我们经过此桥后当前可能是u点,也可能是v点,如果是u点,就说明我们是先跑到的v点,然后经过桥走到的u点,所以加上之前点道...原创 2021-09-28 19:54:43 · 108 阅读 · 0 评论 -
【洛古 P7296】 [USACO21JAN] Uddered but not Herd G
解题思路代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath>#include<map>#include<queue>#include<set>#define ll long long#define ldb long...原创 2021-08-17 20:39:59 · 134 阅读 · 0 评论 -
(纪中)7218. Maze Tac Toe【DFS】【状压】
解题思路将3×33×33×3的棋盘共999个格子的状态通过状态压缩的方式用一个数字表示,0表示没有棋子,1表示放置了一个′M′'M'′M′,2表示放置了一个′O′'O'′O′所有状态数为39=196833^9=1968339=19683对于某个位置的状态的检查,可以预处理出3的次方幂方便直接进行调用,然后根据除法与取模获取状态考虑深搜这张图,记忆化搜索,设置vis数组标记每种状态是否已经搜索过,vis[i][j][k]表示走到位置(i,j),当前棋盘状态为k。如果走到当前位置需要执行一次行...原创 2021-08-16 09:10:06 · 159 阅读 · 0 评论 -
(纪中)7199. 玉米田【状压DP】
解题思路原题链接》》玉米田弱化版哦,还有》》弱化版解题报告注意到“弱化版”三个大字了吗,对的,gmoj就是这么狗,原本看到题还高兴了好久,“做过??”——“不可能的”好吧,回到这个加强版。我们设f[i][j][k]f[i][j][k]f[i][j][k]表示填到第i行j列的时候,已经填过的部分的轮廓的状态是kkk,“轮廓是什么??”,图解如下》》然后就常规操作,正常的判断和转移,代码中有详细注释。非常非常狗的是,就这样还是过不了很**的最后两个点,要加一个超长火车头和优化取模运算。P...原创 2021-07-20 09:31:23 · 88 阅读 · 0 评论 -
【Ybtoj 第24章例3】涂抹果酱【状压DP】
解题思路注意要状压成 3 进制 因为有 3 种颜色。fi,jf_{i,j}fi,j 表示第 i行状态为j的方案总数已经涂好了第 k行 那就分别从 k−1k−1k−1到 0 和k+1到 n ,dp 两个方案数相乘 就是答案了,特判涂第 1 行 和第 n 行的情况。代码#include<iostream>#include<cstdio>#include<cmath>#include<iomanip>using namespace st...原创 2021-07-11 21:40:35 · 217 阅读 · 0 评论 -
【Ybtoj 第24章例2】最短路径【状压DP】
解题思路设fi,jf_{i,j}fi,j表示j 状态走到i时的最短HamiltonHamiltonHamilton路径方程:到 jjj之前,设到达了,就是到达 fi,jf_{i,j}fi,j,这个状态前 先到达了fk,j−(1<<i)f_{k,j-(1<<i)}fk,j−(1<<i),那么 fi,j=fj−(1<<i),k+ak,if_{i,j}=f_{j-(1<<i),k}+a_{k,i}fi,j=fj−(1<<..原创 2021-06-14 22:09:59 · 138 阅读 · 0 评论 -
【洛谷 1879】【USACO06NOV】Corn Fields G【状态压缩】
题目描述Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and can’t be plan原创 2020-08-20 20:27:37 · 143 阅读 · 0 评论 -
【洛谷 2622】 关灯问题II【状态压缩】
题目描述现有nnn盏灯,以及mmm个按钮。每个按钮可以同时控制这nnn盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]a[i][j]a[i][j]为111,那么当这盏灯开了的时候,把它关上,否则不管;如果为-111的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。输入格式前两行两个数,n,mn,mn,m接下来mm原创 2020-08-20 14:55:58 · 107 阅读 · 0 评论 -
【洛谷 1433】吃奶酪【状态压缩】
题目描述房间里放着 n 块奶酪。一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 (0,0)(0,0)(0,0) 点处。输入格式第一行有一个整数,表示奶酪的数量 nnn。第 222 到第 (n+1)(n + 1)(n+1)行,每行两个实数,第 (i+1)(i + 1)(i+1) 行的实数分别表示第 iii块奶酪的横纵坐标 xi,yix_i, y_ixi,yi 输出格式输出一行一个实数,表示要跑的最少距离,保留 222 位小数。输入输出样例输入 #141 11 -1原创 2020-08-20 11:25:35 · 192 阅读 · 2 评论 -
【洛谷 1052】 【NOIP2005 提高组】过河【状态压缩】
题目描述在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,…,L0,1,…,L0,1,…,L(其中LL是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,TS,TS,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。题目给出独原创 2020-08-20 10:25:49 · 228 阅读 · 0 评论 -
【洛谷 2704】【NOI2001】炮兵阵地【状态压缩】
题目描述司令部的将军们打算在N∗MN*MN∗M的网格地图上部署他们的炮兵部队。一个N∗MN*MN∗M的地图由N行MMM列组成,地图的每一格可能是山地(用“H”“H”“H” 表示),也可能是平原(用“P”“P”“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到原创 2020-08-20 08:42:10 · 114 阅读 · 0 评论 -
车II【状态压缩】
Time Limit:1000MS Memory Limit:65536KTotal Submit:74 Accepted:40Description有一个nm的棋盘(n、m≤80,nm≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻。求合法的方案总数。Inputn,m,kOutput方案总数Sample Input3 3 2Sample Output24解题思路代码#include<algorithm>#include<iostre原创 2020-08-19 15:25:42 · 122 阅读 · 1 评论 -
棋盘问题---【状态压缩】
版权此文章属于原创,看此文章前请先参考论文 周伟《动态规划之状态压缩》问题1:在n*n(n≤20)的方格棋盘上放置n个车(可以攻击所在行、列),求使它们不能互相攻击的方案总数。如果用组合学的角度来考虑此问题,那么非常简单:我们一行一行放置,第一行有n种选择,第二行n-1,……,最后一行有1种选择,根据乘法原理,答案就是n!这里我们介绍另一种解法:状态压缩递推(States Compressing Recursion,SCR)。我们仍然一行一行放置。取棋子的放置情况作为状态,某一列如果已转载 2020-08-19 09:45:22 · 279 阅读 · 0 评论 -
车【状态压缩】
Time Limit:1000MS Memory Limit:65536KTotal Submit:95 Accepted:38Description在n*n(n≤20)的方格棋盘上放置n个车(可以攻击所在行、列),有些格子不能放,求使它们不能互相攻击的方案总数。Input第一行为棋盘的大小n第二行为障碍的数量m第三行到第m+3为m个障碍Output总数Sample Input421 12 2Sample Output14解题思路状态压缩递推(States原创 2020-08-19 09:30:59 · 121 阅读 · 0 评论 -
(纪中)1195. 最小总代价【状压DP】
时间限制: 1000 ms 空间限制: 131072 KB 具体限制Goto ProblemSet题目描述nnn个人在做传递物品的游戏,编号为1−n1-n1−n。游戏规则是这样的:开始时物品可以在任意一人手上,他可把物品传递给其他人中的任意一位;下一个人可以传递给未接过物品的任意一人。即物品只能经过同一个人一次,而且每次传递过程都有一个代价;不同的人传给不同的人的代价值之间没有联系;求当物品经过所有nnn个人后,整个过程的总代价最小是多少。输入第一行为nnn,表示共有nnn个人(16原创 2020-06-13 19:12:56 · 224 阅读 · 0 评论