考虑朴素DP,
f
[
i
]
[
j
]
f[i][j]
f[i][j]为前
i
i
i个变为严格单增,最后一个变成
j
j
j的最小代价。问题在于
j
j
j的离散化,如果是严格单增的话有可能改为很多与原来不同的数,不好处理。考虑如果是单调不降,最优方案改完后一定是原数组中的数。那么我们可以先修改成单调不降,最后使
a
i
+
=
i
a_i+=i
ai+=i,在一开始先
a
i
−
=
i
a_i-=i
ai−=i即可。
写出转移方程,
f
[
i
]
[
j
]
=
m
i
n
(
f
[
i
−
1
]
[
k
]
)
(
k
<
=
j
)
+
∣
j
−
a
[
i
]
∣
f[i][j]=min( f[i-1][k] )(k<=j)+|j-a[i]|
f[i][j]=min(f[i−1][k])(k<=j)+∣j−a[i]∣,我们发现这两部分都是关于
j
j
j的凸函数,故相加也是凸函数,每次只要维护这个凸壳即可。用slope trike即可维护。
05-11
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交