状压dp
Aaplloo
天天都想摆
展开
-
[CF1073E] Segment Sum
似乎就是一道数位dp\tt dpdp的板,只是维数有点多,用状压来开?CodeLL k, a[MAXN], Jw[MAXN];struct node{ LL tot, Sum; node(){} node(LL TOT,LL SUM) { tot = TOT; Sum = SUM; } void Clear() { tot = Sum = 0; } bool Check() { return ~ tot && ~ Sum; }} dp[2][2][MAXN][原创 2020-08-09 17:48:59 · 150 阅读 · 0 评论 -
[CF 903F] Clear The Matrix
题目洛谷思路这道题一开始还是挺有思路的。首先,我们一列一列地考虑,因为长度最大为 444,所以每次只考虑一个 4∗44*44∗4的矩形就够了。如果固定了某列,现在的矩形就是一个4∗44*44∗4 的,有 161616 格,用状压 2162^{16}216 存下状态是绰绰有余的。而对于确定下一个左上角填入矩形,对于这个 4∗44*44∗4 矩形的影响也是能够计算出来的。于是定义 dp[i][j]dp[i][j]dp[i][j] 为:前 i−1i-1i−1 列都为 ′.′'.'′.′,以第 iii原创 2020-08-09 17:39:28 · 227 阅读 · 0 评论 -
[CF 757D] Felicity‘s Big Secret Revealed
题目洛谷思路定义 dp[i][j]dp[i][j]dp[i][j] 为: 划分到 iii 位,集合元素状态为 jjj 方案数。转移似乎很简单了,向后枚举断点,记录段值。假设断点为 kkk,段值为 ValValVal,即:dp[k][j∣(1<<(Val−1)]+=dp[i][j]dp[k][j |(1<<(Val-1)]+=dp[i][j]dp[k][j∣(1<<(Val−1)]+=dp[i][j]边界为 dp[i][0]=1dp[i][0]=1dp[i][0原创 2020-08-09 17:11:42 · 174 阅读 · 0 评论 -
[CF 743E] Vladik and cards
题目戳这洛谷思路似乎想到一个状态,感觉不甚靠谱。正解:似乎和我的思考有一些相似之处,然而我是把出现次数放进 dpdpdp 数组的状态里,这样是不好搞的,这就是我放弃自己思路的原因。而题解里选择的方法是:直接二分这个最少的出现次数——似乎很可行?定义 dp[i][j]dp[i][j]dp[i][j] :考虑前 iii 位,状态(即为数组出现的不可重集)为 jjj 可得到的最长序列长度。满足二分出来的最小长度 xxx。转移似乎很简单了,考虑 xxx 个和 x+1x + 1x+1 个就好了。Cod原创 2020-08-08 22:18:43 · 147 阅读 · 0 评论 -
[CF 377C] Captains Mode
洛谷题解首先,只会用到 banbanban 和 pickpickpick,因为 m<=min(n,20)m<=min(n,20)m<=min(n,20)Code#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define MAXM 25#define MAXN (1 <<原创 2020-08-08 02:12:49 · 134 阅读 · 0 评论 -
[CF 71E] Nuclear Fusion
洛谷似乎就是一道暴搜题,只是用状态记忆化?时间复杂度似乎不会证。Code:LL n, m;string Names[] = {" ","H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu","Zn" ,"Ga", "Ge", "As" ,"Se" ,"Br" ,"Kr"原创 2020-08-06 00:09:31 · 192 阅读 · 2 评论 -
[CF111C Petya] and Spiders
题目洛谷思路首先,min(n,m)<=6min(n,m)<=6min(n,m)<=6 是很容易判断出来的。于是我想着:这么小的数据范围,能够直接分类讨论吗?但由于是状压dp板块的题,也没有从这方面细想,题解中似乎有分类讨论的做法。想状压dp的做法。由于之前状压dp做得太少,实在是没什么想法。看了题解梳理一下。由于蜘蛛可以往上下左右四个方向走,以及原地待着,我们将题目转化为:在棋盘上选一些点,点可以覆盖上下左右即自身,求最少多少点可以将棋盘完全覆盖。定义 dp[i][k1][k原创 2020-08-05 15:33:40 · 143 阅读 · 0 评论