状态压缩
状态压缩
SSL_LKJ
蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名
展开
-
P1052 过河(状态压缩)
过河题目传送门解题思路这题就是状态压缩优化你可以先去看看P3951 小凯的疑惑(数论)从上题得知,a*b-a-b是最大不能得到的价值,后面的价值都能够得到这题也大同小异,当奇数和偶数都可以被枚举到时,后面的数自然也可以被枚举到最大能枚举到奇数和偶数的位置,就是T * (T-1),这样就可以压缩空间和运算次数 for(int i=1; i<=m; i++) { b[i]=min(a[i]-a[i-1],90);//最多是10*(10-1)=90 l+=b原创 2020-08-21 08:16:57 · 283 阅读 · 0 评论 -
P1879 [USACO06NOV]Corn Fields G(状压dp)
[USACO06NOV]Corn Fields G题目传送门解题思路这题就用一个f[i][s[j]]表示在当前第 i 行的状态为 s[i]f[i][s[j]]+=f[i−1][s[w]] f[i][s[j]]+=f[i−1][s[w]] f[i][s[j]]+=f[i−1][s[w]]注:要取模AC代码#include<iostream>#include<cstdio>using namespace std;long long n,m,x,t,answer,原创 2020-08-21 08:54:58 · 121 阅读 · 0 评论 -
P2622 关灯问题II(状态压缩优化)
关灯问题II题目传送门解题思路它的起点是一定的,终点也一定,求最小步数,满足边权都为1,很明显是一道状压BFS将它的状态存到队列里,一开始全部为1转移我们设a[i][j]表示第i个开关可以改变第j个灯当a[i][j]为1,并且当前状态的第j位为1时,则当前状态为当前状态异或2^j-1次方,即改变第j位上的值为0当a[i][j]为-1,并且当前状态的第j位为0时,则当前状态为当前状态或2^j-1次方,即改变第j位上的值为1AC代码#include<iostream>#incl原创 2020-08-20 16:02:28 · 246 阅读 · 1 评论 -
P1433 吃奶酪(状压dp)
吃奶酪题目传送门解题思路我们可以设一个f[i][j]i表示,当前在i点,j表示一个二进制,其中0表示没走过,1表示走过f[j][i]=min(f[j][i],double(1.0∗f[k][i−(1<<j−1)])+double(1.0∗dis(j,k)));//状态转移f[j][i]=min(f[j][i],double(1.0*f[k][i-(1<<j-1)])+double(1.0*dis(j,k)));//状态转移f[j][i]=min(f[j][i],double原创 2020-08-20 10:45:40 · 119 阅读 · 1 评论 -
P2704 [NOI2001]炮兵阵地(状压dp)
炮兵阵地题目传送门Description司令部的将军们打算在NM的网格地图上部署他们的炮兵部队。一个NM的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻原创 2020-08-20 08:46:14 · 293 阅读 · 1 评论 -
车II(状压dp)
车IIDescription有一个nm的棋盘(n、m≤80,nm≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻。求合法的方案总数。Inputn,m,kOutput方案总数Sample Input3 3 2Sample Output24解题思路这题就是状压dp先枚举出所有状态**(dfs)**void dfs(int s,int ss,int sss)//dfs枚举状态{ if(ss>n) { a[++o]=s; b[o]=sss; ret原创 2020-08-19 16:45:42 · 1794 阅读 · 1 评论 -
车(状压dp)
车Description在n*n(n≤20)的方格棋盘上放置n个车(可以攻击所在行、列),有些格子不能放,求使它们不能互相攻击的方案总数。Input第一行为棋盘的大小n第二行为障碍的数量m第三行到第m+3为m个障碍Output总数Sample Input421 12 2Sample Output14解题思路我们可以设f[i][j]为当前第i,j这个位置答案方案数,优化就是状压DP状压DP就是降维,把其中一维用二进制表示,转换为十进制存到数组里我们用a数组表示这一行障碍的原创 2020-08-19 11:12:41 · 512 阅读 · 1 评论 -
状态压缩(状态压缩)
状态压缩(状压dp)注:在涉及到位运算时,一定要注意位运算的优先级。该加的括号一定要加定义状态(例如) 求每一种放法的背包价值,状态应该是这n件物品的放与不放的情况。最容易想到的是开个n维数组,第i个维度的下标如果是1的话代表放第i件物品,0的话代表不放第i件物品;但是这样很容易造成空间浪费,而且多维数组也不好开;我们仔细观察就会发现,每件物品有放与不放两种选择;假设我们有5件物品的时候,用1和0代表放和不放如果这5件物品都不放的话,那就是00000;如果这5件物品都放的话, 那原创 2020-08-19 11:00:52 · 3537 阅读 · 1 评论