【发布时间】:2018-06-06 10:09:41
【问题描述】:
我已经阅读了社论,但它很短,并且声称我不明白为什么它是真的。为什么等于找到1*2*1*2*的最长子序列?有人可以逐步解释解决方案并在每一步证明索赔的合理性吗? http://codeforces.com/contest/934/problem/C
这是社论中的“解决方案”,但正如我所说,它很短,我不明白。希望有人可以一步一步地指导我解决问题,而不是像这里的解决方案那样。谢谢。
由于
1 ≤ ai ≤ 2,相当于找到了一个最长的子序列如1 * 2 * 1 * 2 *。通过一个简单的动态规划,我们可以在O(n)或O(n2)时间。可以在模型中看到O(n2)解决方案 下面的解决方案。这里我们介绍一种 O(n) 方法:由于 子序列可以分成4部分(11...22...11...22...),我们 可以设置dp[i][j](i = 1...n, j = 0..3)为最长子序列a[1...i]与第一个j部分。
【问题讨论】:
标签: algorithm dynamic-programming