DP从入土到入门
Posted luckyblock
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DP从入土到入门相关的知识,希望对你有一定的参考价值。
做一大堆DP
P5017 摆渡车
算法一
设 (f_i) 在 (i) 时间发车,发车时等待的时间和的最小值。则显然有:
对于每个 (f_i),当在 (i) 时刻时发第一班车,(f_i)最大,则其初始值为:
为保证载上所有人,最后一班车需在 ([t_{max}, t_{max}+m))内发车,则:
前缀和优化,设 :
对于上式中的 (sumlimits_{j < t_k le i}{i-t_k}),有:
替换状态转移方程。
优化转移方程,对于状态转移方程:
显然,若 (jle i-2m),则在 (j+m) 时刻可多发一班车,不影响在 (i) 时刻发车,且答案不会变劣。
即:停车时间 (i- (j+m) < m)。
故转移方程可替换为:
减去无用状态。
若 (cnt_i=cnt_{i-m}),说明时间段 ([i-m,i])内没有需要坐车的人。
则在 (i-m) 时刻发车,在 (i) 时刻不发车,不会使答案变劣,(f_i) 是一个无用状态。
则可将状态转移方程改为:
(f_i = egin{cases}f_{i-m} &cnt_i=cnt_{i-m}\\ min_{i-2mle jle i-m}(f_j + (cnt_i-cnt_j) imes i - (pos_i-pos_j))& ext{otherwise}end{cases})
当满足 (t_i = t_{i-1}+m) 时,有用的位置最多,为 (nm) 个。
复杂度 (O(nm^2 + t)),期望得分 (100 ext{pts})。
算法二
由算法一,停车时间 (i- (j+m) < m)。
车往返一次时间 (m),则人等车时间 (< 2m)。
设 (f_{i,j}) 表示第 (i) 个人,等待时间为 (j),且前 (i) 个人已到达的时间最小值。
初始值 (f_{1,i} = i)。
分类讨论:
- 若 (t_{i+1} le t_{i+1} + j),则第 (i+1) 个人可和 第 (i) 个人坐同一辆车走。
第 (i+1) 个人的等待时间 (k = t_i+j-t_{i+1})
状态转移方程式为:
- 否则,枚举第 (i+1) 个人的等待时间 (k)。[kin [max(0, t_i + j + m - t_{i+1}), 2m) ]状态转移方程式同上,为:[f_{i+1,k} = min (f_{i+1}, k, f_{i,j} + k) ]
复杂度 (O(nm^2)),期望得分 (100 ext{pts})。
P4910 【帕秋莉的手环】
题目要求:
给定一个长度为 (n) 的环,填入 金色或绿色。
不能有两个相邻的绿色。
多组数据, (Tle 10, nle 10^{18})
矩阵加速模板。
设 (f_{i,0/1}) 为当前填到第 (i) 位,第一个位置为 金色/绿色 的合法方案数。
分成第一个位置为 绿/金讨论:
- 第一个位置为绿色时,(f_{1,0} = 0,f_{1,1} = 1)。
由于不能有两个相邻的绿色,则结尾珠子必为金色。
其对答案的贡献为 (f_{n,0}) - 第一个位置为金色时,(f_{1,0} = 1, f_{1,1} = 0)。
此时结尾珠子颜色任意。
其对答案的贡献为 (f_{n,0} + f_{n,1})
状态转移方程:
(f_{i,0} = f_{i-1,0} + f_{i-1,1})
(f_{i,1} = f_{i-1,0})
复杂度 (O(Tn)),期望得分 ( ext{60pts})。
上式显然可矩阵加速,转移矩阵如下:
复杂度 (O(Tlog n)),期望得分 ( ext{100pts})。
代码 P4910 【帕秋莉的手环】 - Luckyblock
以上是关于DP从入土到入门的主要内容,如果未能解决你的问题,请参考以下文章