给定 n 个测试用例和 m 个代码模块,测试用例的覆盖情况用一个二维数组 cases 表示,其中 cases[i][j] 为 1 表示第 i 个测试用例覆盖了第 j 个模块,为 0 表示未覆盖。要求找出一个最小的测试用例集合,使得该集合覆盖所有模块,即所有模块至少被一个测试用例覆盖。如果不存在这样一个集合,则返回 −1。
假设我们有一系列测试用例,每个测试用例会覆盖测试若干个代码模块。
我们用一个二维数组cases来表示这些测试用例的覆盖情况,其中cases[i][j]为1表示第i个测试用例覆盖了第j个模块,为0则表示未覆盖
求一个最小的测试用例集合,使得该集合能够覆盖所有代码模块。返回最小集合的大小,如果不存在能够覆盖所有代码模块的测试用例集合,则返回−1
第一行输入是两个整数,分别代表用例总数i和代码模块总数j
从第二行开始的i行,每一行有j个整数(0或1),每个整数之间用空格分隔;每一行代表一个用例对代码模块的覆盖情况
参数取值范围
覆盖所有代码模块使用的最小用例集合的大小(int),如果不存在能够覆盖所有模块的测试用例集合则返回−1
输入
3 2
1 0
1 0
1 0
输出
-1
该输入代表有3个测试用例,有2个代码模块,第一个测试用例[1,0]可以覆盖第1个代码模块,第2、3个测试用例相同。
该输入不存在用例集合可以覆盖所有的程序,所以返回−1。
输入
4 4
1 0 1 0
0 1 0 1
1 1 0 0
0 0 1 1
输出
2
输入代表有4个测试用例,有4个代码模块,针对该输入,可以使用用例cases[0]和用例cases[1]覆盖所有模块,也可以选择使用用例cases[2]和用例cases[3]覆盖所有模块,均满足最小用例数要求,所以返回2。
输入
3 2
1 0
0 1
1 1
输出
1
输入代表有4个测试用例,有2个代码模块,针对该输入,可以使用用例cases[2]即可覆盖所有模块,满足最小用例数要求,所以返回1。