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

来源:互联网 发布:怀化天乙网络 编辑:程序博客网 时间:2024/05/16 11:32
题意:
有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;}


0 0
原创粉丝点击