CodeForces 1131G. Most Dangerous Shark

Posted tinywong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 1131G. Most Dangerous Shark相关的知识,希望对你有一定的参考价值。

题目简述:从左到右依次有$n leq 10^7$个Domino骨牌,高度为$h_i$,手动推倒他的花费为$c_i$。每个骨牌之间的距离为$1$。一个骨牌可以被向左或者向右推倒。当第$i$个骨牌被推倒时,他会以相同方向推倒与其距离$<h_i$的所有骨牌。求推倒所有骨牌的最小花费。

解:code

令$L[i], R[i]$分别表示第$i$个骨牌向左(右)推倒后,会将$(L[i], i]$($[i, R[i])$)区间内的骨牌推倒。这个可以用单调栈在$O(n)$时间内解决。

令$f[i]$表示(只通过推倒前$i$个骨牌来)推倒前$i$个骨牌的最小花费,则对$1 leq i leq n$,

$$ f[i] = minleft{ f[L[i]]+c_i, min_{j < i < R[j]} {f[j-1]+c_j} ight}, $$

这个动态规划也能用单调栈在$O(n)$时间内解决。

以上是关于CodeForces 1131G. Most Dangerous Shark的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #541 (Div. 2) (A~F)

CodeForces 1131B(思维题)

CodeForces - 1131D(Three Integers)

Codeforces 1131F Asya And Kittens 并查集

Codeforces Round #649 (Div. 2) B. Most socially-distanced subsequence

Codeforces 1003E