【发布时间】:2016-07-05 01:59:25
【问题描述】:
这是“破解编码面试”一书中的问题:
马戏团正在设计一个由站在彼此之上的人组成的塔式程序 肩膀。出于实用和审美的原因,每个人都必须比他或她下面的人更矮更轻。给定马戏团中每个人的身高和体重,编写一个计算最大可能人数的方法 在这样的塔中。
示例:
输入:
(ht, wt): (65, 100) (70, 150) (56, 90) (75, 190) (60, 95) (68, 110)
输出:
最长的塔长6,从上到下包括:
(56, 90) (60,95) (65,100) (68,110) (70,150) (75,190)
这是书中的解决方案:
“当我们把这个问题的绒毛剪掉后,我们就可以理解问题真的是下面这个问题。
我们有一个成对的项目列表。找到最长的序列,使得第一项和第二项都按非递减顺序。"
我想出了这个例子:
{1,1}
{3,3} {7,2}
{6,4} {9,9} {8,5}
在这里,序列的值不是按非递减顺序排列的,但它仍然是一个有效的塔。而且我找不到将相同物品组织到另一个塔中的方法,该塔中的物品将按非递减顺序排列。我相信没有这样的方法。所以在我看来,解决方案是不正确的。
我错过了什么吗?
提前致谢。
【问题讨论】:
-
这些值不是非递减顺序 => 它不是一个有效的塔 - 根据定义,根据问题文本。是什么让你说它是有效的?
-
在 {3,3} -> {7,2}, 2
-
@Blorgbeard {1,1} 位于 {3,3} 和 {7,2} 之上; {3,3} 位于 {6,4} 和 {9,9} 之上,而 {7,2} 位于 {9,9} 和 {8,5} 之上。
-
@Blorgbeard 没关系,我现在看到这个问题从来没有说过每个人下面站着两个人 :) 我知道我错过了一些东西。谢谢!
标签: algorithm dynamic-programming