1.题目描述:点击打开链接
2.解题思路:本题属于区间dp类问题,根据题意,我们需要修改2到n-1之间的一些h的值,使得相邻2个h值差的绝对值不超过d。因为可以修改的数是一个实数,无法一一枚举,因此需要仔细对问题进行分析。
首先,考虑只有3个值的情况:h1, h2, h3。那么根据题意,h2应该在区间[h1-d,h1+d]和[h3-d,h3+d]之间,即h1应该在[max(h1,h3)-d,min(h1,h3)+d]之间。如果这个区间是空集,即abs(h3-h1)>(3-1)*d,那么自然无解,否则,如果h2就在区间内部,那么不需要修改;如果h2<max(h1,h3)-d,那么就修改为max(h1,h3)-d;如果h2>min(h1,h3)+d,那么就修改为min(h1,h3)+d。可以发现,在这个简单的问题中,h2的最优修改方案只有这3种情况。并且我们还发现了,如果要修改,一定是修改成形如hp+k*d的形式。
接下来我们考虑有n个值的情况,根据类似的推理可以得出:如果abs(hn-h1)>(n-1)*d时候,一定无解。如果满足这个条件,那么中间的每个数字要么不变,要么变成形如hp+k*d的形式。由于abs(hn-h1)<=(n-1)*d。那么k的取值范围最大就是[-n+1,n-1],一共有2n-1种情况,另外