找到rollar将覆盖的最小块数,以便修复所有损坏的块?

时间:2016-08-21 16:15:27

标签: dynamic-programming

分为街区的道路" _ * * _ _ * _ _ _"其中'*'代表受损块。有一个rollar用于修复道路。轧辊具有固定长度K.给定损坏的位置(N)和轧辊K的尺寸。找到轧辊将覆盖的最小块数,以便修复所有损坏的块。 Rolar可能无法持续修复。可能存在差距。you can read it here.

1 个答案:

答案 0 :(得分:0)

让我们说损坏的位置是pos [0],pos [1],...,pos [n-1]。 创建一个dp数组。这里,dp [idx]表示滚子将覆盖以修复从索引idx到n-1的损坏的最小块数,并且它从索引idx开始。 现在,dp [n-1] = k; 对于任何其他索引,比如我,让我们计算dp [i]: 如果滚子保持在pos [i],则滚子将覆盖到pos [i] + k。假设pos [i] + k之后的损坏位置在索引j处。 现在,有两种情况可能。 1.滚筒滚动到覆盖索引j的滚筒。 ANS1 = DP [J + 1] +(POS [j]的-pos [I]) 2.滚子在索引j处再次启动。 ANS2 = DP [j]的+ K 然后,dp [i] = min(ans1,ans2) 可以使用二分搜索来完成索引搜索。 因此,总体时间复杂度:O(n * log(n))。