严格单调递增与非严格之间的转换

①把序列A改成非严格单调递增,至少需要修改序列长减去A的最长不下降子序列长度个数字

②把序列A改成严格单调递增,需要构造序列Bi=Ai-1,然后用上面的方法来求

 

如果直接用序列长减去A的LIS是不对的,例如112233,关键这里存在数字过于密集的情况,

而构造B序列【1,0,0,-1,-1,2】之后就去除了值域的限制,回归到第一个问题\

首先a数组各位减去i,b数组拷贝一份a拿去排序

这里可以离散化A数组,DP[i][j]表示构造前i个数字,最后一个是A数组中第j大的最小误差

dp[i][j]=min(dp[i-1][k])+abs(a[i]-b[j]),由于可选状态dp[i-1][k]的k是越来越大的,

所以决策集合只增大不减小,可以维护一个决策集合的最优值来O(1)做到k的决策

posted @ 2018-03-20 19:20  Drenight  阅读(919)  评论(2编辑  收藏  举报