UVA 11205 The broken pedometer
只要用哪几列就可以使P行都不同。暴力DFS就可以了。
#include<stdio.h> #include<string.h> int n, p;//n列 p行 int map[105][20]; int flaglie[20]; char s[105][20]; int sum; void sou(int ans) { int i, c = 0, j, flag = 0; if (ans == n) { for (i = 0; i < p; i++) { c = 0; for (j = 0; j < n; j++) { if (flaglie[j] == 1) { s[i][c] = map[i][j] + '0'; c++; } } s[i][c] = '\0'; } for (i = 0; i < p; i++) { for (j = i + 1; j < p; j++) { if (strcmp(s[i], s[j]) == 0) { flag = 1; break; } } } if (flag == 0) { if (c < sum)sum = c; } return; } flaglie[ans] = 1; sou(ans + 1); flaglie[ans] = 0; sou(ans + 1); } int main() { int i, j, sb, bs; scanf("%d", &sb); for (bs = 0; bs < sb; bs++) { scanf("%d%d", &n, &p); sum = n; for (i = 0; i < p; i++) { for (j = 0; j < n; j++) { scanf("%d", &map[i][j]); } } sou(0); printf("%d\n", sum); } return 0; }