题目思路
思路:二进制状态压缩
将符文 0 到 9 分别看成 20 到 29,即二进制表示十进制数的存在与否。如此 [0,1023] 就可以表示 0 到 9 是否存在了。
biti 表示第 i 天可用的符文。
所以只要枚举 [1,1023] 这些符文的状态表示,然后对满足任意一天都可以有符文可用的所有符文状态表示,计算这些状态表示的符文的种数,并取个 min ,每种符文都不同,故这就是最少需要准备的符文种数。
题目内容
魔法师准备连续 7 天举行仪式,每天必须激活一枚符文。符文共有 10 种,编号为 0 到 9。由于星象变化,每天都有部分符文无法使用。魔法师可以提前准备若干种符文,仪式当天只要身上至少有一种符文可用即可。已知 7 天中每天的禁用符文列表,问他最少需要准备多少种不同的符文,才能保证每天都能顺利激活一枚符文?如果无论如何都无法满足,输出 −1。
每天的禁用符文数量不超过 10,所有符文编号均为 0 到 9 的整数。
输入描述
输入共 7 行,对应周一到周日。每行第一个整数 ci 表示当天禁用的符文数量,随后 ci 个互不相同的整数,依次给出当天禁用的符文编号。
输出描述
输出一个整数,表示最少需要准备的符文种数;若无法满足要求,则输出 −1。
样例1
输入
1 0
1 1
1 2
1 3
1 4
1 5
1 6
输出
1
说明
符文共有 10 种,编号为 0 到 9。每天恰好有一枚不同的符文被禁用,其余 9 种均可用。例如,可以准备符文 7,该符文在 7 天中均未被禁用,每天都能激活。因此最少需要准备 1 种符文。
样例2
输入
10 0 1 2 3 4 5 6 7 8 9
0
0
0
0
0
0
输出
-1
说明
第 1 天禁用了全部 10 种符文,该天没有任何符文可用。无论提前准备多少种符文,都无法在该天顺利激活。因此无法满足要求,输出 -1。
样例3
输入
9 0 1 2 3 4 5 6 7 8
9 0 1 2 3 4 5 6 7 9
0
0
0
0
0
输出
2
说明
第 1 天禁用了除 9 以外的所有符文,只有符文 9 可用。第 2 天禁用了除 8 以外的所有符文,只有符文 8 可用。第 3 到第 7 天没有禁用任何符文,全部 10 种符文均可用。为了让每天至少有一种符文可用,必须第 1 天有符文 9,第 2 天有符文 8,因此至少需要同时准备 8 和 9 两种符文。最少准备 2 种。