四道DP 简记

四道DP

hb 5月~6月 的时候给我找了刘汝佳紫皮书上 30 道远古 dp 题,原题都是 UVA 的。当时饱受这套题折磨。csp 前 hb 选了其中 4 道比较有价值的题,让我出成模拟。但是我太弱了什么都不会,所以在这里简单记录一下这套题的思路。

T1 UVA 12170.Easy Climb

传送门

Description

n n n 座山,编号从 1 1 1 n n n 。每座山有高度 h i h_i hi 。一次操作中,可以选定一座山 2 ≤ i ≤ n − 1 2\leq i \leq n-1 2in1 ,令 h i ← h i − 1 h_i\gets h_i-1 hihi1 h i ← h i + 1 h_i\gets h_i+1 hihi+1 。同时,操作规定不能把山的高度修改为负数。(操作不能改变第一座山和最后一座山的高度)。

要求操作结束后任意相邻两座山的高度差绝对值不大于 d d d 。即 ∀ 1 ≤ i < n , ∣ h i − h i + 1 ∣ ≤ d \forall 1\leq i<n,|h_i-h_{i+1}|\leq d ∀1i<n,hihi+1d 。求达到这一条件的最小操作次数。如果无解,输出 − 1 -1 1

2 ≤ n ≤ 300 , 0 ≤ d , h i ≤ 1 0 9 2\le n \le 300,0\le d,h_i\le 10^9 2n300,0d,hi109

Solution

不难想到一个朴素的 dp 状态:

  • d p i , j dp_{i,j} dpi,j 表示确定了前 i i i 座山,第 i i i 座修改后高度为 j j j 的最小代价。

转移方程:
d p i , j = min ⁡ k = max ⁡ ( 0 , j − d ) j + d { d p i − 1 , k } + ∣ j − h i ∣ dp_{i,j}=\min_{k=\max(0,j-d)}^{j+d}\{dp_{i-1,k}\}+|j-h_i| dpi,j=k=max(0,jd)minj+d{ dpi1,k}+jhi
d d d h i h_i hi 的值域大小为 H H H 。转移复杂度 O ⁡ ( H ) \operatorname{O}(H) O(H) ,总复杂度 O ⁡ ( n H 2 ) \operatorname{O}(nH^2) O(nH2)

由于转移状态时,是取上一行一段连续区间的最值,且这个区间的左右端点都随 j j j 递增,所以可以用单调队列优化。总复杂度 O ⁡ ( n H ) \operatorname{O}(nH) O(nH)

现在的问题就是,值域 H H H 很大,不能直接作为 dp 的状态。所以我们就会思考,这么大的值域当中,是否有一些值是最优策略下一定不会用到的呢?换句话说,设修改后的高度为 h i ′ h_i' hi,是否存在一个元素较少集合 S S S 使得最优策略中 ∀ h i ′ , h i ∈ S \forall h_i',h_i\in S hi,hiS。如果存在这样的 S S S ,我们就可以修改第二维状态是否时间复杂度能过关。

经过一系列猜结论,我们或许可以发现最后策略中:
∀ h i , h i ′ ∈ S = { h j + x × d ∣ 1 ≤ j ≤ n , − n ≤ x ≤ n } \forall h_i,h_i'\in S=\{h_j+x\times d|1\le j\le n,-n\le x\le n\} hi,hiS={ hj+x×d∣1jn,nxn}
这个结论不难用归纳法证明:

考虑修改后最小的 h i ′ h_i' hi ,它已经是最小了,说明在修改时它向下减小一定不优,那么它一定是向上增加到某个临界高度后停止。而这个临界高度就是 min ⁡ ( h i − 1 ′ , h i + 1 ′ ) − d \min(h_{i-1}',h_{i+1}')-d min(hi1,hi+1)d。那么我们分开考虑 ≤ i − 1 \le i-1 i1 ≥ i + 1 \ge i+1 i+1 的部分,继续选取其中最小的 h j ′ h_j' hj 进行类似归纳,到最后只剩下第一座和最后一座山,这两座山不能修改。对于所有 h i h_i hi ,若它不需要修改,则 h i ′ = h i h_i'=h_i hi=hi,否则 h i ′ = m i n ( h i − 1 ′ , h i + 1 ′ ) − d h_i'=min(h_{i-1}',h_{i+1}')-d hi=min(hi1,hi+1)d,而 h i − 1 h_{i-1} hi1 h i + 1 h_{i+1} hi+1 一定也属于上述集合 S S S 。所以 ∀ h i , h i ′ ∈ S = { h j + x × d ∣ 1 ≤ j ≤ n , − n ≤ x ≤ n } \forall h_i,h_i'\in S=\{h_j+x\times d|1\le j\le n,-n\le x\le n\} hi

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值