刷题系列——最优性 dp

坤坤大战外星人 2

如果不能打了,肯定是出现任何相邻的两个数都至少有一个是 0 0 0。设 f i f_i fi 表示 [ 1 , i ] [1,i] [1,i] 已经打击完,且 a i a_i ai 0 0 0 的最少打击次数。考虑第 i i i 个位置和第 i − 1 i-1 i1 个位置,还有两个位置能影响到它们,为 i − 2 i -2 i2 i + 1 i + 1 i+1,如果我们通过打击 ( i , i − 1 ) (i,i -1) (i,i1) ( i , i + 1 ) (i,i+1) (i,i+1) a i = 0 a_i = 0 ai=0,代价为 a i a_i ai。如果让 a i = a i − 1 = 0 a_i = a_{i-1} = 0 ai=ai1=0,代价为 max ⁡ ( a i , a i − 1 ) \max(a_i,a_{i-1}) max(ai,ai1),方案是先打击 ( i , i − 1 ) (i,i-1) (i,i1),再根据哪一边 ≠ 0 \not= 0 =0 确定是打击 ( i , i + 1 ) (i, i + 1) (i,i+1) 还是 ( i − 2 , i − 1 ) (i-2, i - 1) (i2,i1)。转移方程为

f i = min ⁡ { f i − 2 , f i − 3 + max ⁡ { a i , a i − 1 } } f_i = \min\{f_{i - 2}, f_{i - 3} + \max\{a _i , a_{i - 1} \}\} fi=min{fi2,fi3+max{ai,ai1}}

POJ 1157 LITTLE SHOP OF FLOWERS

f f f 朵花 v v v 个花瓶,编号小的花的花瓶编号比编号大的要小,每个花在每个花瓶都有权值。求摆花的最大权值。

先把题目看作一个 f × v f \times v f×v 的表格。在表格里填数,显然为了给前面的花留下空间,第 i i i 行即为第 i i i 束花的列数即花盆号不能小于他的行号,同理第 i i i 行的列数不能大于 v − ( f − i ) v - (f-i) v(fi)。那么可以设 f i , j f_{i,j} fi,j 为在第 i i i 行的第 j j j 列填数的最大值,转移方程如下

f i , j = m a x { f i − 1 , k ∈ [ 1 , j ) } + s i , j f_{i,j} = max \{ f_{i-1, k \in [1,j) } \} + s_{i,j} fi,j=max{fi1,k[1,j)}+si,j

CF225C Barcode

给定一个矩阵,矩阵中只有 #. 两个符号。求满足新的矩阵每一列都只有一个符号,且连续相同的符号在 [ x , y ] [x,y] [x,y] 内的最少修改次数,每次修改可以修改一个点的符号。

f i , 0 f_{i,0} fi,0 为前 i i i 列满足条件且第 i i i 位为 . 的最少次数, f i , 1 f_{i,1} fi,1 为第 i i i 位为 # 的最少次数。仿照状态预处理前缀和 sum,转移方程如下

f i , 0 = min ⁡ { f i − j ∈ [ x , y ] + s u m i , 0 − s u m i − j , 0 } f_{i,0} = \min \{ f_{i - j \in [x,y]} + sum_{i,0} - sum_{i-j,0}\} fi,0=min{fij[x,y]+sumi,0sumij,0}

f i , 1 = min ⁡ { f i − j ∈ [ x , y ] + s u m i , 1 − s u m i − j , 1 } f_{i,1} = \min \{ f_{i - j \in [x,y]} + sum_{i,1} - sum_{i-j,1}\} fi,1=min{fij[x,y]+sumi,1sumij,1}

CSPJ-S 2019 七连测 Day1 背包

Link

CSPS 2019 十连测 分组

Link

ZR1012 Zbox loves keyboard

Link

AT5760 Manga Market

Link

你可能感兴趣的:(刷题系列——最优性 dp)