如果不能打了,肯定是出现任何相邻的两个数都至少有一个是 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 i−1 个位置,还有两个位置能影响到它们,为 i − 2 i -2 i−2 与 i + 1 i + 1 i+1,如果我们通过打击 ( i , i − 1 ) (i,i -1) (i,i−1) 与 ( 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=ai−1=0,代价为 max ( a i , a i − 1 ) \max(a_i,a_{i-1}) max(ai,ai−1),方案是先打击 ( i , i − 1 ) (i,i-1) (i,i−1),再根据哪一边 ≠ 0 \not= 0 =0 确定是打击 ( i , i + 1 ) (i, i + 1) (i,i+1) 还是 ( i − 2 , i − 1 ) (i-2, i - 1) (i−2,i−1)。转移方程为
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{fi−2,fi−3+max{ai,ai−1}}
有 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−(f−i)。那么可以设 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{fi−1,k∈[1,j)}+si,j
给定一个矩阵,矩阵中只有 #
和 .
两个符号。求满足新的矩阵每一列都只有一个符号,且连续相同的符号在 [ 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{fi−j∈[x,y]+sumi,0−sumi−j,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{fi−j∈[x,y]+sumi,1−sumi−j,1}
Link
Link
Link
Link