首页 > 其他分享 >状压 dp 与 插头 dp

状压 dp 与 插头 dp

时间:2024-02-16 12:11:36浏览次数:20  
标签:插头 格子 复杂度 状压 轮廓线 Theta 行第 dp

矩阵上的 dp:

按格 dp / 轮廓线 dp

设 \(f[i,j,S]\) 表示考虑到第 \(i\) 行第 \(j\) 个格子,轮廓线上所有的格子的状态。

复杂度为 \(\Theta(nm|S|)\)。

按行 dp

\(f[i,S]\) 表示选完前 \(i\) 行的合法方案数。

总复杂度为 \(\Theta(n|S|^2)\)。

P3226 [HNOI2012] 集合选数

给定集合 \(S=\{1,2,\cdots,n\}\)。求满足以下条件的 \(T\) 的个数。

  • \(T\subseteq S\);
  • 若 \(i\in S\),则 \(2i,3i\notin S\)。

\(n\leq 10^5\)。

设 \(f[i,j,S]\) 表示考虑到第 \(i\) 行第 \(j\) 个格子,轮廓线上所有的格子的状态。

[ABC328G] Cut and Reorder

菜。

给定两个长度为 \(n\) 的序列 \(a,b\) 和一个正整数 \(c\),有两种操作。

  1. 把 \(a\) 分成任意 \(x\) 个子段,任意重排后,组成新的 \(a\) 序列。代价为 \(c\cdot (x-1)\)。
  2. 把 \(a_i\) 加上 \(x\)(\(x\) 为任意整数)代价是 \(|x|\)。

问把 \(a\) 变成 \(b\) 的最小代价。

不难发现操作 \(1\) 只会用一次。于是问题转化为:

记 \(b_i\) 匹配了 \(a_{p_i}\)。最小化 \(\sum|a_{p_i}-b_i|\) 与 \(p_i\) 的段数。

其中 \(p_i\) 是一个排列,定义为极长的区间 \([l,r]\),使得 \(\forall i\in [l,r)\),有 \(p_i=p_{i+1}-1\)。

P2109 [NOI2007] 生成树计数

P5303 [\(\textcolor{red}{\textsf{GXOI}}\)/GZOI2019] 逼死强迫症

BZOJ 3864 Hero meet devil

标签:插头,格子,复杂度,状压,轮廓线,Theta,行第,dp
From: https://www.cnblogs.com/Starrykiller/p/18017018/dp-on-set

相关文章

  • [学习笔记]换根 DP 的常用处理方式
    [学习笔记]换根DP的常用处理方式换根DP,又称作二次扫描法,通常用于“对每个根求出树形DP的答案”。以每个点作为根节点进行一次树形DP的代价通常无法承受,因此我们会使用两次DFS:第一次DFS指定一个点为根节点,运行一次常规的树形DP。第二遍DFS进行换根DP,得到将根转移......
  • DP 做题记录
    复杂DP各种巨大DP。CF123CBrackets题意:括号数组是一个只有“(”或“)”两类字符的二维数组。括号数组中的合法路径只能从任意位置开始,向右或向下移动。如果一个n×m括号数组中从(1,1)到(n,m)的所有路径经过的字符构成的字符串均为可以完全匹配的括号序列,则这个括号......
  • DP 优化
    DP优化一些典型或者不典型的DP优化实例。CF354DTransferringPyramid题意:有一个\(n\)层的金字塔,现在能进行两种操作,一是给某个点染色,代价是3,或者画一个底边是金字塔底边的子三角形,给每个点,代价是点数+2,要求用最小代价覆盖所有要染色的\(m\)个点。思路:定义\(h_i\)表......
  • 【无评级杂题】DP/贪心
    题目这题后来看了看网上的思路,发现贪心就能做,亏我还写了个O(2*N)的DP...浪费时间了属于是my-code#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<cstdlib>#include<algorithm>#include<stack>#include<queue>......
  • 树形 DP
    简单的树上dp其实已经在普及组涉及过:自上而下和自下而上传递的性质。现在我们需要研究更复杂的树上dp,比如换根dp等等。【树上dp】最大子树和给出一棵带点权的树,求这棵树中的最大权连通块。因为是无根树,我们人为规定1号结点为根。\(dp[i]\)表示以\(i\)为根的子树......
  • 区间 DP
    思路:按区间的\(len\)从小到大DP,枚举左端点,算出右端点,再枚举中间的分界点转移有可能是向左右两端各扩展\(1\)步还有时要记录在左/右端点,分开转移把问题划分为区间长度更短的最优子结构注意\(len=1\)时初始化及边界P4342[IOI1998]Polygon这题已经说了去掉一条边后执......
  • 高维前缀和(SOS DP)
    高维前缀和(SOSDP)通常求二维前缀和,用容斥来求但其实,完全可以先做一遍行的前缀和,再做一遍列的前缀和拓展到\(k\)维也是如此,可以在\(O(nk)\)的复杂度求前缀和但怎么和DP扯上关系?可以把第\(i\)维当作阶段,每一维的具体信息是状态先枚举阶段,表示当前固定其它维,只统计这一......
  • TCP和UDP面试题提问
    @目录TCPUDP总结应用TCP(传输控制协议)和UDP(用户数据报协议)是两种计算机网络通信协议,它们在网络通信中起着不同的作用。TCPTCP是面向连接的协议,它在数据传输之前需要在发送端和接收端建立一条连接。TCP提供可靠的数据传输,它使用确认和重传机制来确保数据的可靠性和完整性。T......
  • P1941-DP【绿】
    题目本身只是一道有些难度的普通dp题,题解中有人说可以把这个看作是背包,我不是这么做的便没细看,感觉能把他联想为背包问题的特例的人的发散思维能力真强。不过倒也没必要,常规做即可,用二维数组即可描述状态,dp[i][j]表示只由前i个横向单位长度组成的游戏中以(i,j)结尾游戏所需的最小游......
  • 数位 DP 做题记录
    数位DP数位DP的常见套路就是记录当前到哪一位,是否抵着上界,转移时枚举当前可以填哪些数,做一遍记忆化搜索。P3413SAC#1-萌数题意:求\([l,r]\)中有多少个数中含有回文子串。思路:如果存在回文子串,那么必然有相邻两位相同或者间隔一位相同,在数位DP时额外记录前2位就可以......