Description:
给定一个整数序列,每次可以把一个数加大或减小,求:
1.最少操作几个数是原序列严格单增
2.在第一问的前提下,增大减小的总绝对值的最小值是多少
Hint:
\(n \le 10000\)
Solution:
这题是真的难,,,,,,
首先第一问应该都想得到,转化求保留最多数,就有:
\[f[i]=f[j]+1(a[i]-a[j]>=i-j)
\]
把转移条件移项得:
\[a[i]-i>=a[j]-j
\]
令\(b[i]=a[i]-i\) ,就是求b的LIS
第二问
我们现在考虑对于两个相邻的\(b[i]\)
他们中间对应的原\(a[i]\)都是不合法的
所以需要调整
首先你要\(yy\)出一个十分不显然的结论:
对于中间一端的\(a[i]\)一定会变成一个分别沿着\(a[l]\)和\(a[r]\)连续\(+1\)的阶梯状
且中间有一个分界点,换句话说,就是他们的\(b[i]\)不是变成b[l]就是\(b[r]\)
故我们可以枚举这个分界点\(k\)来\(dp\),复杂度\(O(n^2)\)可以卡过
#include