Content:dp优化
Date:2025.7.26
例题
思路
直接单调队列维护即可,具体操作如下:
- 每次查看队尾的元素,维护单调性。
- 对于队头不在当前滑动窗口的元素,弹出。
提交记录:link
思路
定义 dpi 表示第 i 个任务完成所花费的最小代价。转移如下:
dpi=1≤j≤imindpj+(s+Ti−Tj−1)×(Fn−Fj−1)
对于本题数据范围 n≤3000,O(n2) 可过。
提交记录:link
思路
dp 的方式和定义与前面相同,但是 O(n2) 的复杂度无法接受,所以考虑优化。
将 dp 的式子拆开,发现:
dpi=1≤j≤imindpj+FiTi−FjTi+Fns−Fjs
移项,得:
dpj=(Ti+s)Fj+(dpi−FiTi−Fns)
很明显可以用斜率优化,单调队列维护下凸壳即可。
提交记录:link
思路
注意数据范围,∣Ti∣≤28,所以 Ti+s 不具有单调性,所以上面面直接维护的方法不可做。于是我们考虑直接维护整个下凸壳,对于转移时,二分查找就可以了。
提交记录:link
思路
我们定义 dpi,j 表示到第 i 天走到了第 j 个城市的最小平方和。之所以这样定义,是因为:
s2×m2=m∑i(si−s)2×m2=m(m∑isi)2−2×m∑isi×∑isi+∑isi2×m2=−(i∑si)2+m×i∑si2
所以最后的答案只和后面的平方和有关。
转移还是单调队列维护下凸壳即可。
提交记录:link