首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
洛谷 P4484 - [BJWC2018]最长上升子序列(状压 dp+打表)
】的更多相关文章
【bzoj5161】最长上升子序列 状压dp+打表
题目描述 现在有一个长度为n的随机排列,求它的最长上升子序列长度的期望. 为了避免精度误差,你只需要输出答案模998244353的余数. 输入 输入只包含一个正整数n.N<=28 输出 输出只包含一个非负整数,表示答案模998244353的余数. 可以证明,答案一定为有理数,设其为a/b(a.b为互质的整数),你输出的整数为x, 则你需要保证0≤x<998244353且a与bx模998244353同余. 样例输入 2 样例输出 499122178 题解 状压dp+打表 套路:对于排列问题,从左…
洛谷 P4484 - [BJWC2018]最长上升子序列(状压 dp+打表)
洛谷题面传送门 首先看到 LIS 我们可以想到它的 \(\infty\) 种求法(bushi),但是对于此题而言,既然题目出这样一个数据范围,硬要暴搜过去也不太现实,因此我们需想到用某种奇奇怪怪的方式进行状态压缩 DP,这样一来就可以排除掉不少常用的求 DP 的方法:譬如最常用的从左往右顺着钦定元素并设 \(f_i\) 表示以 \(i\) 结尾的 LIS 的长度的方法,因此考虑换个角度,从小到大添加元素.还是设 \(f_i\) 表示以 \(i\) 结尾的 LIS 的长度,那么考虑在一轮中,我们在…
洛谷P3959 宝藏(NOIP2017)(状压DP,子集DP)
洛谷题目传送门 Dalao的题解多数是什么模拟退火.DFS剪枝.\(O(3^nn^2)\)的状压DP之类.蒟蒻尝试着把状压改进了一下使复杂度降到\(O(3^nn)\). 考虑到每条边的贡献跟它所在的层有关,所以如果我们能够将一层的边一起加进去,计算就会方便许多.于是想办法把这个转移过程状压一下. 设\(f_{i,j}\)为当前已选点集为\(i\),下一层加入的点集为\(j\)时,新加入的所有点与原有点之间最小的边权之和.计算的具体实现,我们\(O(2^n)\)枚举\(i\),再枚举\(i\)的补…
BZOJ.3591.最长上升子序列(状压DP)
BZOJ 题意:给出\(1\sim n\)的一个排列的一个最长上升子序列,求原排列可能的种类数. \(n\leq 15\). \(n\)很小,参照HDU 4352这道题,我们直接把求\(LIS\)时的状态存下来做DP数组的状态. 状态就是那个单调递增的单调栈.每个数会有三种可能:没入过栈,现在在栈中,之前在栈中但是被替换掉了. 所以用一个\(n\)位三进制数表示单调栈的状态\(s\).然后枚举状态\(s\),再枚举一个没出现过的数,很好转移. 转移时注意\(LIS\)长度不能超过\(k\),以及…
洛谷P1896 [SCOI2005]互不侵犯King【状压DP】
题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入格式: 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) 输出格式: 所得的方案数 输入样例 3 2 输出样例 16 题(mang)目(mu)分析: 爆裂吧!!!五重循环!!!! 我们用三维数组dp[i][j][l] 表示前i行共放了l个king 且第i行状态为j的方案数 先把只考…
【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)
题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. 定义状态:一个二进制数某一位为\(1\)表示该位放了国王,反之亦然. 设\(f[i][j][k]\)表示,前\(i\)行,已经放了\(j\)个国王,并且第\(i\)的状态为\(k\)时的方案数. 直接枚举所有状态显然不可行,于是可以先预处理去所有相邻两格不矛盾的状态,也就是每一行可能出现的状态.…
BZOJ 2734 洛谷 3226 [HNOI2012]集合选数【状压DP】【思维题】
[题解] 思维题,看了别人的博客才会写. 写出这样的矩阵: 1,3,9,... 2,6,18,... 4,12.36,... 8,24,72,... 我们要做的就是从矩阵中选出一些数字,但是不能选相邻的. 我们可以发现,在100000的范围内,这个矩阵最多只有18行,11列. 那么这个矩阵的取数字的方案数直接状压DP即可.f[i][j]表示第i行,状态为j的方案数,转移就是f[i][j]=sigma(f[i-1][k]) ,条件是(j&k==0且k&(k>>1)==0) 但是这…
【洛谷5492】[PKUWC2018] 随机算法(状压DP)
点此看题面 大致题意: 用随机算法求一张图的最大独立集:每次随机一个排列,从前到后枚举排列中的点,如果当前点加入点集中依然是独立集,就将当前点加入点集中,最终得到的点集就是最大独立集.求这个随机算法的正确率. 前言 \(PKUWC\)的题目就是妙啊. 题目很神仙,但看完题解后就很简单了,可这种东西像我这般蒟蒻根本想不到啊...... 状压\(DP\) 设\(f_{i,j}\)表示当前已考虑过点集\(i\),最大独立集为\(j\)的方案数. 每次我们枚举一个不在点集中的点\(k\),设与其相邻的点…
BZOJ 5161: 最长上升子序列 状压dp+查分
好神啊 ~ 打表程序: #include <cstdio> #include <cstring> #include <algorithm> #define N 140000000 #define ll long long #define mod 998244353 #define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w"…
洛谷P2396 yyy loves Maths VII【状压dp】
题目:https://www.luogu.org/problemnew/show/P2396 题意:有n个数,每次选择一个表示走$a[i]$步,每个数只能选一次. 最多有两个厄运数字,如果走到了厄运数字就不能继续走下去了. 选完所有数有多少种方案. 思路:n很小,状压. 用state表示已经选了哪几个数.如果state是厄运数字就continue 不是的话state就需要加上所有是1的,这道题卡常,所以可以用上lowbit.再开O2优化. #include<cstdio> #include&l…