Solution -「简单 DP」zxy 讲课记实】的更多相关文章

魔法题位面级乱杀. 「JOISC 2020 Day4」治疗计划 因为是不太聪明的 Joker,我就从头开始理思路了.中途也会说一些和 DP 算法本身有关的杂谈,给自己的冗长题解找借口. 首先,治疗方案不会重复使用.因为重复使用只会空加代价,而不会在特定时刻产生额外贡献.故而总决策方案应有 \(2^m\) 个,我们需要在这 \(2^m\) 个中找出最小可能花费. DFS 是最显然的算法,但显然不可做,不过它枚举状态的思路很好地把我们引向了 DP. 于是开始尝试设计 DP 状态. DP 状态定义中,…
目录 「CF 750E」New Year and Old Subsequence 「洛谷 P4719」「模板」"动态 DP" & 动态树分治 「洛谷 P6021」洪水 「SP 6779」GSS7 「NOIP 2018」「洛谷 P5024」保卫王国 \(\mathcal{Introduction}\) \(\mathcal{Problem~1}\)   给定序列 \(\{a_n\}\),其中 \(a_i\in\mathbb Z\),求其最大子段和(不能为空).   很显然的 DP…
\(\mathcal{Description}\)   Link.   给定一个长为 \(n\) 的非负整数序列 \(\lang a_n\rang\),你可以进行如下操作: 取 \([l,r]\),将其中所有 \(a\) 值 \(-1\): 取 \([l,r]\),将其中奇数下标的 \(a\) 值 \(-1\): 取 \([l,r]\),将其中偶数下标的 \(a\) 值 \(-1\).   求至少需要几次操作使得所有 \(a\) 值变为 \(0\).   \(n\le10^5\),数据组数 \(…
\(\mathcal{Description}\)   Link.   求 \[\sum_{m>0\\a_{1..m}>0\\a_1+\cdots+a_m=n}\prod_{i=1}^mf_{a_i} \]   其中 \(f_i\) 为 Fibonacci 数列第 \(i\) 项(\(f_0=0,f_1=1\)),答案对 \(10^9+7\) 取模.   \(n\le10^{10^4}\). \(\mathcal{Solution}\)   记 \(F(x)\) 为 \(\{f\}\) 的 O…
\(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率随机.求 \(\{b_n\}\) 中 LIS(最长上升子序列)的期望长度.对 \(10^9+7\) 取模.   \(n\le6\),\(a_i\le10^9\). \(\mathcal{Solution}\)   欺负这个 \(n\) 小得可爱,直接 \(\mathcal O(n!)\) 枚举 \(…
\(\mathcal{Description}\)   Link.   给定两个长度为 \(K\) 的 \(01\) 串 \(S,T\) 和 \(n\) 组操作 \((a_i,b_i)\),意义为交换 \(S_{a_i}\) 和 \(S_{b_i}\).你需要执行一段长度不小于 \(m\) 的连续操作区间,最大化 \(S\) 和 \(T\) 相同的位数.求出最大相同位数.   \(K\le20\),\(m\le n\le10^6\). \(\mathcal{Solution}\)   一个简单的…
\(\mathcal{Description}\)   Link.   给定非负整数序列 \(\{a_n\}\) 和 \(m\),每次随机在 \(\{a\}\) 中取一个非零的 \(a_i\)(保证存在),令其 \(-1\),重复 \(m\) 次,求最终 \(\{a\}\) 中 \(0\) 的期望个数.   \(n\le15\),\(m\le100\). \(\mathcal{Solution}\)   既然有 DP of DP,我觉得这种题就叫 DP and DP.(   看到 \(n\le1…
\(\mathcal{Description}\)   Link.   给定一棵 \(n\) 层的完全二叉树,你把每个结点染成黑色或白色,满足黑色叶子个数不超过 \(m\).对于一个叶子 \(u\),若其 \(k\) 级父亲与其同为黑色,则对答案贡献 \(a_{uk}\):若同为白色,则对答案贡献 \(b_{uk}\).求最大贡献和.   \(n\le10\). \(\mathcal{Solution}\)   想要 DP,比如令 \(f(u,i)\) 表示 \(u\) 子树内有 \(i\) 个…
\(\mathcal{Description}\)   Link.(HDU 裂开了先放个私链 awa.)   在一个 \(n\times n\) 的方格图中,格子 \((i,j)\) 有权值 \(w_{i,j}\),现可将一些不相邻的格子染黑,并保证白格子在四联通意义下存在哈密顿回路,方案的价值为染色格子权值之和.求方案的最大价值.   \(n\le10\),数据组数 \(T\le30\). \(\mathcal{Solution}\)   Emmm...插头 DP 写得太少了,这题还算比较常规…
\(\mathcal{Description}\)   Link.   初始有一个有向图 \(G=(V,E)\),\(V=\{s,t\}\),\(E=\langle s,t\rangle\),一次操作定义为取任意 \(\langle u,v\rangle\in E\),设 \(w\) 为一个新结点,则令 \(V=V\cup\{w\}\),\(E=E\cup \{\langle u,w\rangle,\langle w,v\rangle\}\).现进行 \(n\) 次操作,求最终有多少个本质不同的…
\(\mathcal{Description}\)   Link.   有 \(n\) 列下底对齐的方格纸排成一行,第 \(i\) 列有 \(h_i\) 个方格.将每个方格染成黑色或白色,求使得任意完整 \(2\times2\) 矩形内恰有两个白色(和两个黑色)的方案数.答案模 \(10^9+7\).   \(n\le100\),\(h_i\le10^9\) \(\mathcal{Solution}\)   小清新 DP 题叭.   首先考虑在完整的网格图里染色,若某一行完成染色,那么下一行的方…
\(\mathcal{Description}\)   Link.   积性函数 \(f\) 满足 \(f(p^c)=p\oplus c~(p\in\mathbb P,c\in\mathbb N_+)\),求 \(\sum_{i=1}^n f(i)\bmod(10^9+7)\). \(\mathcal{Solution}\)   首先,考虑 \(f\) 的素数点值: \[f(p)=\begin{cases} 3,&p=2\\ p-1,&\text{otherwise} \end{cases…
\(\mathcal{Description}\)   Link.   有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \(p_{i,k}\).依照此规则确定权值后,你不停抽卡,每次抽到第 \(i\) 张卡牌的概率正比于 \(w_i\),直到所有卡都被抽过至少一次.   此后,记 \(t_i\) 表示第 \(i\) 张牌第一次被抽到的时间.给定 \(n-1\) 条形如 \(\lang u,v\rang\) 的限制,表示…
写的大多只是思路,比较简单的细节和证明过程就不放了,有需者自取. 基环树简介 简单说一说基环树吧.由名字扩展可得这是一类以环为基础的树(当然显然它不是树. 通常的表现形式是一棵树再加一条非树边,把图画出来是一种向外发散的有趣图案. 体现在[题目条件]上就是一个 \(n\) 个点 \(n\) 条边的连通图或保证每一个点的入度 / 出度为 \(1\) (有向图:前者称为外向树,后者称为内向树). 常常会把一些在树上做的 dp 放在基环树上以提高题目难度. 惯用思路是先把以环上的点为根的子树内的信息跑…
\(\mathcal{Description}\)   Link.   给定含 \(n\) 个点 \(m\) 条边的简单有向图 \(G=(V,E)\),求 \(H=(V,E'\subseteq E)\) 的数量,使得 \(H\) 是强连通图.答案模 \((10^9+7)\).   \(n\le15\). \(\mathcal{Solution}\)   仙气十足的状压容斥.   令 \(f(S)\) 表示仅考虑点集 \(S\) 的导出子图时,使得 \(S\) 强连通的选边方案数,那么 \(f(V…
\(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\) 和 \(m\) 个操作,第 \(i\) 个操作有 \(p_i\) 的概率将 \([l_i,r_i]\) 内的元素 \(+1\).且保证任意两个区间要么不交,要么有包含关系.求所有操作完成后序列最大值的期望.   \(n\le10^5\),\(m\le5000\). \(\mathcal{Solution}\)   首先应当知道,\(E(\max\{a_i\})\not=\max\{E(a_i…
\(\mathcal{Description}\)   Link.   给定一棵含有 \(n\) 个结点的树,点 \(u\) 有点权 \(w_u\),求树上非空连通块的数量,使得连通块内点权积 \(\le m\).   \(n\le2\times10^3\),\(m\le10^6\),\(w_u\in[1,m]\),数据组数 \(T\le10\). \(\mathcal{Solution}\)   很明显是点分,每次考虑跨当前分治重心 \(r\) 的所有连通块对答案的贡献.问题变为:求树上以 \…
\(\mathcal{Description}\)   Link.   有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数量的求给第 \(i+1\) 个人,第 \(n\) 个人则可以给第 \(1\) 个人.设所有人同时进行一次传球后,第 \(i\) 个人手里有 \(b_i\) 个球,并令 \(B\) 为所有可能的 \(\lang b_n\rang\) 构成的集合,求 \[ \sum_{\lang b_n \rang\i…
\(\mathcal{Description}\)   Link.   有 \(n\) 支蜡烛,第 \(i\) 支的坐标为 \(x_i\),初始长度为 \(a_i\),每单位时间燃烧变短 \(1\) 直到长度为 \(0\).你从 \(0\) 位置出发,每次可以向左或向右走 \(1\) 单位,走到一个蜡烛的位置可以吹熄蜡烛.求最多能保留的蜡烛长度之和.   \(n\le300\). \(\mathcal{Solution}\)   和 甲虫 这题比较像,可以说是相同思路的不同实现方法.问题的核心自…
\(\mathcal{Description}\)   Link.   求长度为 \(n\),值域为 \([1,m]\) 的整数序列 \(\lang a_n\rang\) 的个数,满足 \(\not\exist i\in[1,n),~\max_{j=1}^i\{a_j\}=\min_{j=i+1}^n\{a_j\}\),答案对大素数 \(p\) 取模.   \(n\le400\),\(m\le10^8\). \(\mathcal{Solution}\)   前几天刚胡了一个 "DP and DP…
\(\mathcal{Description}\)   Link.   有 \(n\) 种颜色的,第 \(i\) 种有 \(a_i\) 个,任意两球互不相同.还有 \(m\) 个盒子,每个盒子可以被放入某些颜色的小球,且第 \(i\) 个盒子要求放入总数不少于 \(b_i\).你要拿走尽量少的球,使得要求无法被满足,并求出此时拿球方案数模 \(998244353\) 的值.   \(n\le20\),\(m\le10^4\). \(\mathcal{Solution}\)   如果保持清醒地做这…
\(\mathcal{Description}\)   Link.   给定一棵含 \(n\) 个结点的树,结点 \(1\) 为根,点 \(u\) 初始有点权 \(a_u=0\),维护 \(q\) 次操作: 给定 \(u\),将 \(u\) 子树内的点权加 \(1\): 给定 \(u,v\),将 \(u,v\) 简单路径上的点权加 \(1\).   每次操作后,求出树最靠近结点 \(1\) 的带权重心.   \(n,q\le10^5\). \(\mathcal{Solution}\)   记点权…
\(\mathcal{Description}\)   Link.   给定简单无向图 \(G=(V,E)\),点的编号从 \(1\) 到 \(|V|=n\).对于 \(k=2..n\),求 \(H=(V,E'\subseteq E)\) 的个数,使得 \(1\) 与 \(k\) 连通.   \(n\le17\). \(\mathcal{Solution}\)   一种在状压 DP 子集枚举时的去重 trick√   令 \(f(S)\) 表示仅考虑点集 \(S\) 的导出子图时,使得点集 \(…
\(\mathcal{Description}\)   Link.   求包含 \(n\) 个结点 \(m\) 条边的仙人掌的最大独立集.   \(n\le5\times10^4\),\(m\le6\times10^4\). \(\mathcal{Solution}\)   建出圆方树,考虑树上 DP.   设状态 \(f(i,0/1)\) 表示该点不选择/不限制选择与父亲相邻的圆点(对于圆点,即它本身)时,子树内的最大独立集.转移分圆点和方点讨论: 圆点:很显然,\(f(u,0)=\sum_{…
\(\mathcal{Description}\)   Link.   对于简单无向图 \(G=(V,E)\),定义它是"优美"的,当且仅当 \[\forall\{a,b,c,d\}\sube V,((a,b),(b,c),(c,d)\in E)\Rightarrow(a,c)\in E\lor(b,d)\in E\lor(a,d)\in E \]   给定一个"优美"的简单无向图 \(G\),对于所有 \(i\in[1,n]\),求有多少个 \(S\sube V\…
\(\mathcal{Description}\)   Link.   给定一棵包含 \(n\) 个点的有标号树,求与这棵树重合恰好 \(0,1,\cdots,n-1\) 条边的树的个数,对 \(10^9+7\) 取模.   \(n\le100\). \(\mathcal{Solution}\) \(\mathcal{Case~1}\)   考虑把"是否是原树上的边"看做一种权值,相当于求完全图的生成树.具体地,令完全图中,原树有的边的权值为 \(1\),否则为 \(x\),用多项式暴…
\(\mathcal{Description}\)   Link.   对于 \(x\in\mathbb N^*\),令 \(s(x)\) 表示将 \(x\) 十进制下的各位数码排序后得到的十进制数的值.求 \(\sum_{i=1}^X s(i)\) 对 \((10^9+7)\) 取模的结果.   \(X\le10^{700}\). \(\mathcal{Solution}\)   下记 \(m=10\)(进制),\(n=\lceil\log_mX\rceil\). \(\mathcal{Cas…
\(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,求无序三元组 \((u,v,w)\) 的个数,满足其中任意两点树上距离相等.   \(n\le10^5\). \(\mathcal{Solution}\)   考虑如何计数.对于任意三元组 \((u,v,w)\),我们仅在其两两路径所进过的树上最高点对其统计一次.如图:   对于三元组 \((4,6,7)\),我们仅希望在 \(1\) 处统计它的贡献.   考虑 DP,记 \(d(u,v)\)…
\(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,反复随机选取一条边,合并其两端两点,新点编号在两端两点等概率选取.问每个点留到最后的概率.   \(n\le50\). \(\mathcal{Solution}\)   推荐 @ywy_c_asm 的博客 owo.   所有的操作方案数是 \((n-1)!\),我们可以按删边顺序看做一个长度为 \(n-1\) 的序列.对于每个点分别计算答案,把当前要算的点提为根(记为 \(r\)),我们只需要…
\(\mathcal{Description}\)   Link.   给定 \(01\) 序列 \(\{A_n\}\) 和 \(\{B_n\}\),其中 \(1\) 的个数均为 \(k\).记 \(A\) 中 \(1\) 的位置为 \(\{a_k\}\),\(B\) 中的为 \(\{b_k\}\).现任意排列 \(\{a_k\}\) 和 \(\{b_k\}\),然后依次交换 \(A_{a_i}\) 和 \(A_{b_i}\),\(i=1,2,\dots,k\).求使操作完成后 \(A=B\)…