【2022NOI模拟赛7T1】锁 做题记录

房子一共住了 nn 个人,这 nn 个人每个人有一个重要程度。

房门上可以装有若干把锁,每把锁有一种唯一的钥匙与之对应。

每一种钥匙可以复制若干份,并且可以发给任意多个居民。每个人都可以持有若干钥匙,也可以不持有钥匙。

如果若干名居民钥匙的并集是全集,他们都在场时就能打开房门,否则不能打开房门。

现在规定,一组居民都在场时能打开房门当且仅当他们的重要度之和大于等于为 mm

问至少需要给房门装多少把锁。即,求最小的 kk,使得存在一种分配钥匙的方案,满足任意一组重要度之和小于 mm 的居民持有的钥匙的并集不能打开所有房门且任意一组重要度之和大于等于 mm 的居民持有的钥匙的并集能打开所有房门。

1n201\le n\le201m1091\le m\le 10^91aim1 \le a_i \le m

一道神奇的结论题。

首先摆出结论:答案即为不同的非空集合 SS 个数 xx,满足 SS 里面的人的重要度之和小于 mm,但是 SS 任意再加上一个人的重要度之和就大于等于 mm

证明:

  1. 证明锁的个数小于 xx 都不可行:考虑反证,设 l<xl<x 且有 ll 个锁的情况是可行的,那么由于一共有 xx 个满足条件的 SSx>lx>l,所以必定有两个满足条件的集合 XXYY 缺同一把钥匙。那么 XXYY 并起来也还是缺那一把钥匙,而此时的重要度之和肯定要大于等于 mm,却开不了门,不合法。
  2. 证明锁的个数等于 xx 可行:有这样的一种构造方法,每个人持有所有代表的集合不包含他的锁的钥匙。

最后记得特判 ai<m\sum a_i<m 的情况,这时只需要一个任何人都没有钥匙的锁即可。