uva11205-The broken pedometer(损坏的步数计)

来源:互联网 发布:软件概要设计 编辑:程序博客网 时间:2024/05/23 05:08

对于我,这个题最大的障碍是理解题意,题意应是:找出最少的LED灯,使得给出的每个数字能够被识别出来,最后输出灯的个数即可。

最好的算法是子集生成法。此处我使用的是位向量子集生成法:

代码如下:

#include <cstdio>#include <cstring>int str[100][20];int p, n, t, min, id[20];void subset(int p, int cur){    if(cur==p)    {        int sum = 0, c = 0;        for(int i = 0; i < p; i++)        sum+=id[i];        for(int i = 0; i < n; i++)        for(int j = i+1; j < n; j++)        {            c = 0;            for(int k = 0; k < p; k++)            if(id[k]&&str[i][k]==str[j][k])c++;            if(c==sum)return;        }        min = min>sum?sum:min;        return;    }    id[cur]=1;    subset(p,cur+1);    id[cur]=0;    subset(p,cur+1);}int main (){    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&p,&n);        for(int i = 0; i < n; i++)        for(int j = 0; j < p; j++)        scanf("%d",&str[i][j]);        min = p;        subset(p, 0);        printf("%d\n",min);    }    return 0;}


原创粉丝点击