UVA 11205 - The broken pedometer

题目大意:给你 n 个 LED 组成的相同的显示器 m 个,每个显示器上显示一个符号

               问最少使用 n 位中的几个位,就能区分这 m 个不同符号,均不相同即可

解题思路:枚举所有可能的方案,记录下最小的那个

#include <cstdio>
#include <cstring>

int main() {
	int t, vis[1<<15];
	scanf("%d", &t);
	while (t--) {
		int LED[105] = {0}, n, m, num, ans = 20;
		scanf("%d%d", &n, &m);
		for (int i = 0; i < m; ++i)
			for (int j = 0; j < n; ++j) {
				scanf("%d", &num);
				LED[i] = (LED[i] << 1) + num;
			}

		for (int i = 0; i < (1 << n); i++) {
			bool real = true;
			memset(vis, 0, sizeof(vis));
			for (int j = 0; j < m; j++)
				vis[LED[j] & i] ? real = false, j = m : vis[LED[j] & i] = 1;

			if (real) {
				int sum = 0;
				for (int j = 0; j < 15; j++)
					sum += ((i>>j) & 1);
				if (sum < ans) 
					ans = sum;
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}


你可能感兴趣的:(UVA 11205 - The broken pedometer)