我们获得了许多锁,并且为了打开这些锁,我们需要确切地打开那个锁。鉴于我们拥有的人数和需要打开的锁的数量,我们需要一个关于如何在可用人员中分配密钥的规范,以便打开该锁的任何数量的所需人员可以打开它,但是没有少组那些必需的人可以打开它。
人数将在1-9范围内,打开锁所需的人数将在0-9范围内
考虑以下示例
可用人数= 2
所需数量= 1 答案:{{0},{0}}
他们中的任何一个都可以打开它,因此它们都被赋予相同的密钥。
可用人数= 5
所需数量= 3
Ans:{{0,1,2,3,4,5},{0,1,2,6,7,8},{0,3,4,6,7,9},{1 ,3,5,6,8,9},{2,4,5,7,8,9}}
有人可以帮我解决这个问题。
谢谢
答案 0 :(得分:1)
让 n 为总人数,让 m 成为打开所有锁的最小人数。
然后,有两个要求:
将这两个要求放在一起,我们实际上在(键)和( n - m + 1人)之间有一对一的映射。< / p>
所以你只需要找到 n - m + 1个人的所有集合(这在O中很容易做到(2 n < / em> )时间,并且在O中不太难( C ( n , n - m + 1))时间)。对于每个集合,创建一个密钥并将其分发给该集合中的人员。