动态编程解决方案 - 如何解决? (指出我正确的方向)

时间:2011-11-14 03:10:36

标签: c++ algorithm dynamic-programming

我有一个关于动态编程的问题,来自USACO。 (学习计算机科学)。

问题文本位于此处:http://pastebin.com/MiJ5aEWc

我认为这可能类似于Max Inc子序列,但有人可以指出我正确的方向吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

是。它可以在O(n log n),动态编程中解决:
首先按x坐标对奶牛进行排序,并将品种类型映射到整数[1..k]。 (k <= n):O(n log n)
define dp [i] =最大索引j使得从第j个牛到第i个所有品种出现或-1如果不存在。
因为对于每个k <= dp [i]牛范围[k,i]是可接受的并且i <1。 j - &gt; dp [i]&lt; = dp [j]你可以通过记录奶牛范围[dp [i],i]中每种奶牛的数量来解决O(n)中的dp部分。