最近打算开始练练 DP,提升一下思维。
这题其实比较显然吧,只要读透了题(虽然没多少)就很好想到了。
很显然最后的序列是长成这样的:−1,…,−1,0,…,0,1,…,1。
设 fi,j 表示使得前 i 个数满足单调不降,第 i 个数为 j 的最小方案。
那么显然有
fi,−1={fi−1,−1,ai=−1fi−1,−1+1,ai=0fi−1,−1+2,ai=1
fi,0={∞,ai=−1min(fi−1,−1,fi−1,0),ai=0fi−1,−1+1,ai=1
fi,1={fi−1,1+2,ai=−1fi−1,1+1,ai=0min(fi−1,−1,fi−1,0,fi−1,1),ai=1
如果无法理解转移方程,请时刻考虑单调性。
同时注意因为语言问题,我们可以把每个数 +1。
代码:
1 |
|