编辑:在问题结束时,我将为奖金难题的第一个求解器颁发100信誉的赏金!
我只会在答案出现时才将赏金添加到问题中,因为该赏金没有截止日期。
给定一个非递减的一位正整数列表,您应该确定这些位数将挖掘多深的地牢。
███ ███ A dungeon with 5 blocks removed and a depth of 3.
███ ███
███ ████
████████
在开始挖掘之前,地面是水平的。
每个手指都可以从其下方精确地移除一个土块,但是它必须从地牢外部到达该位置,并且在移除后必须离开地牢。这样做时,数字在任何水平步长处的下降或上升都不能超过其数值。
数字使用以下策略进行挖掘:
- 值最小的数字首先挖掘,然后,下一个挖掘器始终是其余数字中的下一个最小值。
- 第一位数字可以在任何位置挖掘。(所有地面都相同。)
- 下面的数字总是在最左边的已经开始的列上挖掘,它们可以出来。如果不存在这样的列,他们将在最右边的列的右侧开始挖掘一个新列。
例如,数字1 1 1 2 3 3
将挖出下面的地牢(逐步可视化,并用数字标记该位置挖出哪种数字):
███1████ ███11███ ███11███ ███11███ ███11███ ███11███
████████ ████████ ███1████ ███1████ ███1████ ███13███
████████ ████████ ████████ ███2████ ███2████ ███2████
████████ ████████ ████████ ████████ ███3████ ███3████
████████ ████████ ████████ ████████ ████████ ████████
示例说明:
- 如果第二个
1
将其加深到2
-deep,以便它正确地挖掘出来,则它不能爬出唯一可用的列。 - 第三个
1
可以在最左边的列中挖掘,从而创建一个2
-deep列,因为它可以移至1
-deep列,然后移至地面。 - 下一个
2
和3
两个都可以在最左边的列中挖掘。 - 最后一个
3
不能在最左边的列中挖掘,而可以在下一个列中挖掘。
输入值
- 带有至少一个元素的一位数正整数的非递减列表。
输出量
- 单个正整数,表示所构造地牢的深度。
例子
输入=>输出(以地牢从左到右的深度作为解释,这不是输出的一部分)
[3] => 1
(column depths are [1])
[1, 1, 1, 2, 3, 3] => 4
(column depths are [4, 2])
[1, 1, 1, 1, 1, 1, 1, 1] => 3
(column depths are [3, 2, 2, 1])
[1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5] => 11
(column depths are [11, 6, 2])
[1, 1, 1, 1, 1, 2, 2, 9, 9, 9] => 7
(column depths are [7, 2, 1])
[2, 2, 2, 2, 2, 5, 5, 5, 7, 7, 9] => 9
(column depths are [9, 2])
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5] => 10
(column depths are [10, 5])
[1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 7, 7, 9] => 13
(column depths are [13, 5])
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] => 13
(column depths are [13, 5])
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9] => 21
(column depths are [21, 12, 3])
这是代码高尔夫球,因此最短的条目将获胜。
奖金难题
您能否证明(或反对)“数字使用以下挖掘策略”一节中描述的策略始终为给定的数字提供最深的地牢?