uva 11205 - The broken pedometer
2013-02-15 13:00
423 查看
题意是用最少的二进制位数表示一些不同,这个题关键是要将给你的二进制数转化为在枚举要用到某些二进制位情况下对应的十进制数,,并以此来判断是否相同。
#include <cstdio> #include <cstdlib> #include <cstring> #include <map> using namespace std; int exp[16], a[101]; int main() { exp[0]=1; for(int i = 1; i < 16; i++) exp[i] = exp[i-1]*2; int t;scanf("%d",&t); while(t--) { int p, n, min=100; scanf("%d%d",&p,&n); for(int i = 0; i < n; i++) //转化为十进制存储 { a[i]=0; for(int j = p-1; j >= 0; j--) { int k; scanf("%d",&k); a[i]+=exp[j]*k; } } map <int,int> m; for(int i = 0; i < (1<<p); i++) //枚举子集即 需要的二进制位 { int flag = 1; m.clear(); for(int j = 0; j < n; j++) { int temp = i&a[j]; //在某二进制位被用到的情况下 且 这一位为1才能为 1 if(m.count(temp)) //在这种情况下找出对应的十进制,并用map判重 { flag = 0; break; } else m[temp]=1; } if(flag) { int cnt=0; for(int j = 0; j < 16; j++) cnt+=(i>>j)&1; if(min>cnt)min=cnt; } } printf("%d\n",min); } return 0; }
相关文章推荐
- UVA - 11205 The broken pedometer(子集枚举+增量构造法)
- UVA 11205 - The broken pedometer
- UVA 11205 The broken pedometer(子集枚举)
- UVA 11205 The broken pedometer
- uva 11205 The Broken Pedometer
- UVA 11205 - The broken pedometer
- UVa 11205 The broken pedometer (枚举好题&巧用二进制)
- uva 11205 - The broken pedometer
- UVA 11205 The broken pedometer
- UVa-11205-The broken pedometer
- UVa 11205 - The broken pedometer
- uva 11205 The broken pedometer
- UVa-11205-The broken pedometer
- UVA 11205 The broken pedometer
- uva 11205 - The broken pedometer
- uva 11205 The broken pedometer
- uva 11205 The broken pedometer
- UVA 11205 The broken pedometer
- UVA 11205 The broken pedometer(子集枚举)
- UVA - 11205 The broken pedometer