LOJ6435 「PKUSC2018」星际穿越

参考这篇blog

f i , k f_{i,k} fi,k为从 i i i出发,走 k k k步能够到达的最靠左的点。则有 f i , k + 1 < f i , k f_{i,k+1} < f_{i,k} fi,k+1<fi,k

显然 f i , 1 = l i f_{i,1} = l_i fi,1=li

然后是 f i , 2 = min ⁡ j ≥ l i { l j } f_{i,2} = \min_{j \ge l_i} \{l_j\} fi,2=minjli{lj}

  • 对于 j ∈ [ l i , i ) j\in [l_i,i) j[li,i) i i i可以在第一步走到 j j j
  • 对于 j > i j>i j>i,如果 l j ≤ i l_j\le i lji我们可以选择在第一步走到 j j j,否则 l j > i l_j > i lj>i l j l_j lj一定不会被 min ⁡ x ≥ l i { l x } \min_{x\ge l_i}\{l_x\} minxli{lx}取到。

对于 f i , k ( k > 2 ) f_{i,k} (k > 2) fi,k(k>2),有 f i , k = min ⁡ j ∈ [ f i , k − 1 , f i , k − 2 ) { l j } = min ⁡ j ∈ [ f i , k − 1 , i ) { l j } f_{i,k} = \min_{j\in [f_{i,k-1},f_{i,k-2})} \{ l_j \} = \min_{j\in [f_{i,k-1},i)} \{ l_j \} fi,k=minj[fi,k1,fi,k2){lj}=minj[fi,k1,i){lj}。由于显然 f i , k < f i , 2 ≤ min ⁡ j ≥ i { l j } ( k > 2 ) f_{i,k} < f_{i,2} \le \min_{j\ge i} \{l_j\}(k > 2) fi,k<fi,2minji{lj}(k>2),所以也可以写作 f i , k = min ⁡ j ∈ [ f i , k − 1 , n ] { l j } f_{i,k} = \min_{j\in [f_{i,k-1},n]} \{ l_j \} fi,k=minj[fi,k1,n]{lj}。这个式子中 f i , k f_{i,k} fi,k的取值与 i i i无关而只与 f i , k − 1 f_{i,k-1} fi,k1有关,所以可以倍增求出 k = 2 j k=2^j k=2j时的 f i , k f_{i,k} fi,k ∑ x ∈ [ 1 , k ] f i , x \sum_{x\in [1,k]}f_{i,x} x[1,k]fi,x

实现上,可以强制先走 k = 1 k=1 k=1的第一步 f i , 1 = l i f_{i,1} = l_i fi,1=li,这样的话之后的每一步的转移都满足 f i , k = min ⁡ j ≥ f i , k − 1 { l j } f_{i,k} = \min_{j\ge f_{i,k-1}} \{ l_j\} fi,k=minjfi,k1{lj}

Code

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值