1455G Forbidden Value(数据结构优化dp+启发式合并)
Educational Codeforces Round 99 (Rated for Div. 2)
G. Forbidden Value
题意:给一个初始值为 0 0 0 的变量 x x x 以及一段只包含 s e t 、 i f 、 e n d set、if、end set、if、end 的简易代码段,代码 “ s e t y v set~y~v set y v” 表示将 x x x 赋值为 y y y,或者花费 v v v 的代价不执行该语句,代码块 i f y . . . e n d if~y~...~end if y ... end 为条件语句块,当 x x x 的值等于 y y y 时才会进入该代码块,代码块可以嵌套。在程序的运行过程当中一旦 x x x 的值变成了 s s s 就会立马崩溃,现在问至少要花费多少的代价才能让程序正常跑完。
范围: 1 ≤ n ≤ 2 e 5 , 1 ≤ s ≤ 2 e 5 , 0 ≤ y ≤ 2 e 5 , 1 ≤ v ≤ 1 e 9 1 \le n \le 2e5, 1 \le s \le 2e5, 0 \le y \le 2e5, 1 \le v \le 1e9 1≤n≤2e5,1≤s≤2e5,0≤y≤2e5,1≤v≤1e9。
分析: 可以先考虑基本的 d p dp dp, d p i j dp_{ij} dpij 表示执行完第 i i i 条语句后 x x x 的值为 j j j 所需要的最小代价。若代码段中只存在 s e t set set 语句的话这个 d p dp dp 很好写,只需要注意进行离散化。现在考虑 i f . . . e n d if~...~end if ...