您的位置:首页 > 其它

UVA 11205 The broken pedometer ------二进制枚举

2015-08-01 17:17 393 查看
题意:
有p盏LED灯,开着表示1,关着表示0。用这7盏灯表示出10个不同的数,现在问最少可以用多少盏灯,就能够将这n个不同的数分辨出来

分析:
由于LED灯最多为15,用二进制枚举,一共就2^15种,再加上对每种情况进行判断,是否能够表示出不同的数,最多每组100次比较,所以时间复杂度为10^6左右,暴力可以完成

代码如下:

#include <iostream>
#include <stdio.h>
using namespace std;
int n,a[105],p;
void dfs()
{
int t=1<<p,mn=p+1;
for(int i=0;i<t;i++)
{
int j=i;
int ge=0;
while(j>0)
{
ge+=j&1;
j=j>>1;
}
if(ge>=mn)
continue;
int bj[33000]={0};
for(j=0;j<n;j++)
{
int k=a[j]&i;
if(!bj[k]) bj[k]=1;
else break;
}
if(j==n)
mn=ge;
}
printf("%d\n",mn);
return ;
}
int main()
{
int t,k;
cin>>t;
while(t--)
{
scanf("%d%d",&p,&n);
for(int i=0;i<n;i++)
{
a[i]=0;
for(int j=0;j<p;j++)
{
scanf("%d",&k);
a[i]=a[i]*2+k;
}
}
dfs();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: