糖果店的老板一共有 M 种口味的糖果出售。
为了方便描述,我们将 M 种口味编号 1∼M。
小明希望能品尝到所有口味的糖果。
遗憾的是老板并不单独出售糖果,而是 K 颗一包整包出售。
幸好糖果包装上注明了其中 K 颗糖果的口味,所以小明可以在买之前就知道每包内的糖果口味。
给定 N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖果。
输入格式
第一行包含三个整数 N,M,K。
接下来 N 行每行 K 这整数 T1,T2,⋅⋅⋅,TK,代表一包糖果的口味。
输出格式
一个整数表示答案。
如果小明无法品尝所有口味,输出 −1。
数据范围
1≤N≤100,
1≤M,K≤20,
1≤Ti≤M
输入样例:
6 5 3
1 1 2
1 2 3
1 1 3
2 3 5
5 4 2
5 1 2
输出样例:
2
解题思路:用动态压缩来存储每一组含有的口味,再用dp计算尝遍所有口味得出最小的包数.
注:dp数组的初始值要赋值为-1,在不能尝遍所有口味时,不需要额外去判断。用w[i]数组存储每一组糖果口味.
对于不懂状态压缩的人,我稍微解释下,
例如;
6 5 3 状态压缩
十进制 二进制
1 1 2 3 00011
1 2 3 7 00111
1 1 3 5 00101
2 3 5