博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 11205 - The broken pedometer
阅读量:5992 次
发布时间:2019-06-20

本文共 1236 字,大约阅读时间需要 4 分钟。

hot3.png

暴力枚举所有的子集列,比较在每种情况下每行是否唯一,我把每行数据当成2进制转化为10进制之后比较的。这里枚举子集是用的位向量法,产生的子集序列 子集大小变化是不规则的,但是一旦有小的子集可以区分所有行,子集大的情况就不用计算了,直接可以忽略。

 

 

#include
#include
#include
int led[105][20];int flag[20];int p, n;int minNum;void judge() { int arr[105]; int idx = 0; int setSize = 0; int i, j; for (i = 0; i < p; i++) { if (flag[i]) { setSize++; } } /*子集列超过当前最小值,直接忽略*/ if (setSize >= minNum) return; /*每一行2进制数据根据子集列转化成十进制,如果有相同的则失败返回。*/ for (i = 0; i < n; i++) { int curNum = 0; for (j = 0; j < p; j++) { if (flag[j] && led[i][j]) { curNum += pow(2, j); } } for (j = 0; j < idx; j++) { if (arr[j] == curNum) { return; } } arr[idx++] = curNum; } /*没有返回表明没有相同的行*/ if (setSize < minNum) minNum = setSize; return;}/*递归生成子集列,在子集列中判断*/void subSet(int cur) { if (cur == p) { judge(); return; } flag[cur] = 0; subSet(cur + 1); flag[cur] = 1; subSet(cur + 1);}int findMinNum() { minNum = p; subSet(0); return minNum;}int main() { int cases; scanf("%d", &cases); while (cases--) { scanf("%d%d", &p, &n); int i, j; for (i = 0; i < n; i++) for (j = 0; j < p; j++) scanf("%d", &led[i][j]); printf("%d\n", findMinNum()); } return 0;}

 

转载于:https://my.oschina.net/jdflyfly/blog/283623

你可能感兴趣的文章
webservice 发布到外网的时候
查看>>
菜鸟修炼C语言小设计之——通讯录(二)
查看>>
Linux 常用命令
查看>>
openstack grizzly版cloud控制节点安装
查看>>
Spring事务管理4-----声明式事务管理(2)
查看>>
开发要注意的事项
查看>>
vue2.0实现页面刷新时某个input获得focus
查看>>
染色 Wannafly挑战赛20 A 思维
查看>>
How to Customize UITabBar on iOS 5
查看>>
Java构建工具Ant小记(一)
查看>>
数据库oracle DBA SQL语句调优
查看>>
是时候
查看>>
存储过程
查看>>
HTML-part1
查看>>
iOS block的使用
查看>>
java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)...
查看>>
回6G重修程序基础
查看>>
DEDE首页调用{dede:field.content/}
查看>>
070102_赌博设计:概率的基本概念,古典概型
查看>>
【转】Faster RCNN 原理
查看>>