关闭

uva11205 The broken pedometer

160人阅读 评论(0) 收藏 举报

计时器坏了

判断至少几列数字可以判断出这几个数字

子集

位向量法

#include <stdio.h>
#include <string.h>
int mat[105][20], b[20];
int min, p, n;

void subset(int cur){
	if (cur == p) {
		for (int i = 0; i < n - 1; i++)
			for (int j = i + 1; j < n; j++) {
				bool flag = false;
				for (int k = 0; k < p; k++)
					if (b[k] && mat[i][k] != mat[j][k])           //选中的元素之中     两行之间至少要有一个元素不同
						flag = true;
				if (!flag)
					return ;
			}
		int res = 0;
		for (int i = 0; i < p; i++)
			if (b[i])
				res++;     //选了几个元素
		min = min > res ? res : min;
		return ;
	}
	b[cur] = 1;   //选第cur个元素
	subset(cur + 1);
	b[cur] = 0;  //不选第cur个元素
	subset(cur + 1);
}

int main(){
	int t;
	while (scanf("%d", &t) != EOF) {
		while (t--) {
			scanf("%d %d", &p, &n);
			for (int i = 0; i < n; i++)
				for (int j = 0; j < p; j++)
					scanf("%d", &mat[i][j]);
			min = p;
			memset(b, 0, sizeof(b));
			subset(0);
			printf("%d\n", min);
		}
			
	}
	return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9674次
    • 积分:794
    • 等级:
    • 排名:千里之外
    • 原创:71篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章分类