集训Day1-DP初入
DP
LGP1772
简要题意: 给定无向带权图(\(m\) 点 \(e\) 边),一共有 \(n\) 天,其中每天都有若干点不能走,与前一天路径不同将增加 \(k\) 代价,求 \(n\) 天总代价(总路径长度+额外代价),\(n\le 100,m\le 20, e\le 200\)
一句话题解: DP。考虑维护 \(i\sim j\) 天代价 \(cost_{i,j}\),维护前 \(i\) 天最小代价 \(f_i=\min_{0\le j< i}(f_j+cost_{j+1,i}\cdot(i-j)+k)\),表示从 \(j+1\) 天到第 \(i\) 天路径相同的代价。部分细节需特判。
CF1312E
简要题意: 给定长度 \(n\) 序列 \(a\) ,若 \(a_i=a_{i+1}\),那么可以合并两数为 \(a_i+1\),求最终最短长度。\(n\le 500\)
一句话题解: 先设计区间DP数组 \(f_{i,j}\) 为区间 \([i,j]\) 最终合成数(一定不超过一种),时间 \(\Theta(n^3)\)。然后再DP求解最少段数,\(\Theta(n^2)\)
分析: 设 \(b_i=2^{a_i}\),那么合并操作就是 \(2^{a_i}+2^{a_{i+1}}=2^{a_i+1}\),在 \(b\) 上表现为加法。加法有固定答案。
CF1485F
简要题意:
解法1: 发现操作序列可以如此与合法 \(a\) 满足双射:我们设 \(f_{i,0/1}\),转移为
详细地,\(\texttt{Wrong}=cnt_{S_i-1}\),\(cnt\) 用map维护,每次对 \(cnt_{S_j}\) 加上 \(f_{j,1}\) ,\(S\) 是 \(b\) 的前缀和
解法2: 对于前 \(i\) 个数,维护方案数 \(f_k\)。\(k\) 是当前 \(a\) 的前缀和
- 复制操作,让 \(f'_{k+b_i}=f_k\)
- 求和操作,让 \(f'_{b_i}=\sum_{k=-\infty}^{\infty} f_{k}\)
- 去重:\(b_{i+1}=a_{i+1}=\sum_{j=1}^{i+1} a_j\),此时 \(k=0\),应不转移/撤销复制操作。
发现操作1可以直接用全局位移的形式,直接转移。剩下两个在位移后计算。范围极大,使用map等数据结构维护。
CF1209E2
只有前 \(n\) 个最大值所在列有贡献。把图缩成 \(n\times n\)
若我们放宽限制,使 \(r_i\) 是第 \(i\) 行随便选,发现答案与原问题等价。
令 \(S\) 是已经选出的 \(r_i\) 的 \(i\) 的集合。
枚举 \(\bar S\) 子集 \(T\),使 \(f_{i,S}:=f_{i+1,S\mid T}+g_T\)。\(g_S\) 为集合 \(S\) 对应的 \(r_i\) 最大值。
总结: 去除无用状态、放宽限制且仍等价
CF1215E
简要题意: 给定长度 \(n\) 序列 \(a\),求最小相邻交换次数,使相同值连续。\(n\le 4\cdot 10^5,1\le a_i\le 20\)
首先,交换次数等价于求逆序对对数。
令 \(f_S\) 为权值集合 \(S\) 的最小答案,\(g_{x,S}\) 表示满足 \(a_i = x,a_j \in S,i < j\) 的 (i,j) 个数
那么,有
计算 \(g\) 可以用 \(w_{x,y}\) 表示 \(a_i=x,a_j=y,i<j\) 的 \((i,j)\) 对数。则 \(g_{x,S}=g_{x,S/ \{y\}}+w_{x,y},y\in S\)
CF626F
简要题意: 给定 \(n\) 个数,求分组方案数,满足每个组内最大值与最小值之差的总和小于 \(k\),对 \(10^9+7\) 取模。
因为不需要有序,先对序列排序,使得从小到大,便于处理差。
考虑DP,设计状态为 \(f_{i,j,k}\),表示前 \(i\) 个数,有 \(j\) 个可以接着分组(未确定),当前总代价为 \(k\)。
不能直接考虑,因为第三维有可能到达极大/极小值炸空间。
发现 \(a_r-a_l=\sum_{i=l}^{r-1} (a_{i+1}-a_i)\)。所以可以拆贡献。
因为有 \(j\) 个组的极差拆除了这个相邻差,所以代价 \(d=j\cdot (a_i-a_{i-1})\)。
分类讨论,当前为 \(f_{i,j,k}\) 时有四种情况:
- 添新组,可以继续分:\(f_{i,j,k}\to f_{i+1,j+1,k+d}\)
- 添新组,不可以继续分:\(f_{i,j,k}\to f_{i+1,j,k+d}\)
- 直接插入,可以继续分:\(j\cdot f_{i,j,k}\to f_{i+1,j,k+d}\)
- 直接插入,不可以继续分:\(j\cdot f_{i,j,k}\to f_{i+1,j-1,k+d}\)
CF632E
简洁题意: \(n\) 个物体,均有价值 \(v_i\),问刚好 \(k\) 个物体总价值可能数量。重点:\(\Theta(n^3)\) 可以通过本题。
容易构造状态 \(f_i\) 表示直到当前,取到 \(i\) 价值的最小所需价值。但这样我们这样无法确定是否能刚好取到 \(k\) 个。
首先,如果有价值为0的物品,那我们就可以构造让所有物体数量小于 \(k\) 的方案合法(补0)。我们可以将每一个数减去最小值来构造0,然后将状态中的价值乘上 \(k\cdot min\),便是答案。

浙公网安备 33010602011771号