Algorithm 找出N个不同高度的人的排列数量,以便从前面可以看到其中的K个

Algorithm 找出N个不同高度的人的排列数量,以便从前面可以看到其中的K个,algorithm,Algorithm,如何找到N个不同身高的人(可能有些人身高相同)在队列中的排列方式,以便从队列前面看到atmost K。如果一个人身高为H,从前面看不见,那么从前面看不到他后面的任何较矮(或同等身高)的人。此外,如果从前面可以看到高度为H的人。然后,从前面看不到任何在他后面且身高小于或等于H的人。或者简单地说,一个人可以从前面看到,当且仅当他面前的所有人都比他矮 示例: 如果有三个人的身高={1,2,3} 然后在以下安排中: 1->2->3(1在前面) 1->3->2 2->1->3 2->3->1 3->1->

如何找到N个不同身高的人(可能有些人身高相同)在队列中的排列方式,以便从队列前面看到atmost 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)的数量级。我认为我们可以有一个动态规划解决方案,但我无法解决它。

非常感谢您的帮助。

编辑:这不适用于多人身高相同的情况

我认为,考虑到最高的男人,不管他是否排在队伍的后面,你都可以得到一个循环。假设我们正在寻找
n
人和
k

假设最高的人在队伍的末尾。他总是可以被看到,因此
k
可以看到的配置数量就是剩余
n-1
人的
k-1
数量

假设他不在队伍的末尾。然后就再也看不到排在队伍末尾的那个人了。因此,我们需要找到一些方法,让
k
人们可以从
n-1
队列中看到不在队列末尾的人。但是有
n-1
人可以排在队列的末尾,因此
n-1
的配置数量将是我们实际看到的较小案例的两倍

所以复发率很高

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


我现在没有时间将其转化为动态规划解决方案,但边界条件等应该非常简单。

testuser:我无法得到您的解决方案。我们总是从前面看。您的解决方案是如何处理多个身高相同的人的?您是否根据身高或其他因素对人员进行了排序?@user113936我错过了关于相同身高人员的部分。@user113936我假设我们只是查找人数(不输出配置或任何内容),因此无需对任何内容进行排序,只需评估重复性。非常感谢testuser。但我仍在努力找到你的解决办法。可能是因为我的问题不清楚。现在我已经更新了。如果有重复的,如何解决这个问题?我找不到解决办法,我试了很多。几乎一整天,但找不到解决方案。这个问题似乎离题了,因为它不是一个编程问题。这是一道数学题。尝试或者。@RaymondChen我认为答案与斯特林数字有点不同,因为身高相同的人是允许的。不过,谢谢你的指点@RaymondChen非常感谢,我认为问题非常相似。这是一个正在进行的比赛的问题,有一个不同的问题陈述()但问同样的问题,我要求主持人锁定它。