找到不同高度的N个人的排列数,使得他们的K从前面可见

时间:2014-02-09 02:17:13

标签: algorithm

如何找到不同高度的N个人(可能有些人具有相同的高度)被安排在队列中的方式的数量,使得当从队列的前面看时,几乎K是可见的。如果一个人的身高是H而且从前面看不到,则从前面看不到身后任何更短(或高度相同)的人。此外,如果从正面可以看到高度为H的人。然后,任何在他身后并且身高小于或等于H的人从前面都看不到。或者简单地说,一个人从前面可见,当且仅当他面前的所有人都严格地比他短。

例:
如果有三个人的身高= {1,2,3} 然后在以下安排中:
1-> 2-> 3(1在前面)
1→3→2
2→1→3
2→3→1
3→1→2
3→2→1
我们可以看到以下人数:
3
2
2
2
1
1
分别
注意:N的值将是(100)的量级。我想我们可以有一个动态编程解决方案,但我无法弄清楚 任何帮助都很受欢迎。

1 个答案:

答案 0 :(得分:1)

编辑:这不涉及多个人具有相同高度的情况。

我认为你可以通过考虑最高的人以及他是否在排队的后方来重新发生。假设我们正在寻找可以看到的n人和k

假设最高的人在队列的末尾。他总能被看到,k可以看到的配置数量是可以看到其余k-1n-1的数字。

假设他不在队列的末尾。那个队列末尾的人永远都看不到了。因此,我们需要找出k人可以从不在队列末尾的n-1中看到的方式的数量。但是有n-1个人可以在队列的末尾,所以配置数量会n-1次,就像我们真正关注的是一个较小的案例一样。

所以复发是

  

T(n,k)= T(n-1,k-1)+(n-1)* T(n-1,k)

我现在没有时间将其变成动态编程解决方案,但边界条件等应该非常简单。