uva 11205 The broken pedometer(暴力枚举+子集生成)

本文介绍了一个使用位向量解决数字辨识问题的算法实现过程。该算法的目标是在给定数量的灯泡表示不同数字时,找出能够区分这些数字所需的最小灯泡数量。文中详细解释了算法思路,并提供了完整的C语言代码实现。

     我终于可以说这是我自己独立完成的题目了,没看题解,没看注释,虽然用的时间成了写,总归有成就感的,昨天晚上就写了个大概,有点bug,由于太晚了,而且有点困了,就去睡了,当时真是自己认真想了的,大笑,很深入的想了,用的书上刚学会的位向量自己生成来判断的。以后都要努力自己想,自己解决,专注。。。深入。。。。奋斗

思路:

就是先算出最少用m个灯才能表示n个数字,然后找第一个数字(由许多灯组成的0,1序列)的个数为m的子

集,把这n个子集作为n个数字的下标,判断一下有没有玩去一样的,如果有的话证明这两个数字不能通过m个灯来判

断,然后就把m加1,找第一个数字个数为m+1的子集,和m的时候一样进行判断

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int B[20];
int sum;
int map[105][20];
int ans;
int res[20];
int flag,n;

void find(int m,int *B,int cur)
{
	if(flag)
		return ;
	if(cur == m)
	{
		if(ans!=sum)
			return ;
		int k = 0;
		memset(res,0,sizeof(res));
		for(int i=0; i<cur; i++)
		{
			if(B[i])
			{
				res[k++] = i;
			}
		}
		//puts("");
		//puts("***********************");
		//for(int p=0; p<k; p++)
		//	printf("%d ",res[p]);
		//puts("");
		for(int i=0; i<n; i++)
		{
			for(int j=i+1; j<n; j++)
			{
				int nodeng = 0;
				for(int p=0; p<k; p++)
				{
					//printf("%d ",res[p]);
					if(map[i][res[p]]!=map[j][res[p]])
					{
						//printf("ii = %d jj = %d\n",i,j);
						//printf("k = %d\n",k);
						//printf("p = %d\n",res[p]);
						nodeng = 1;
						break;
					}
				}
			
				//puts("**************");
				if(nodeng==0)
				{
				//	printf("i = %d j = %d\n",i,j);
				//	printf("map[0][3] = %d map[8][3] = %d\n",map[0][3],map[8][3]);
					//system("pause") ;
					return ;
				}
			}
		}
		flag = 1;
		//puts("***********************");
		return ;
	}
	B[cur] = 1;
	ans++;
	find(m,B,cur+1);
	B[cur] = 0;
	ans--;
	find(m,B,cur+1);
}
int main()
{
	int T,m,i,j;
	scanf("%d",&T);
	while(T--)
	{
		memset(B,0,sizeof(B));
		memset(map,0,sizeof(map));
		scanf("%d%d",&m,&n); //m表示灯的个数,n表示数字的个数 
		for(i=0; i<n; i++)
			for(j=0; j<m; j++)
				scanf("%d",&map[i][j]);
		//printf("**map[0][3] = %d map[8][3] = %d\n",map[0][3],map[8][3]);
		if(n==1)
		{
			printf("%d\n",0);
			continue;
		}
		if(m==0||n==0)
		{
			printf("%d\n",0);
			continue;
		}
		int x = 1;
		ans = 0;
		for(i=1; i<=m; i++)
		{
			x*=2;
			if(x >= n)
			{
				x = i;
				break;
			}
		}
		//printf("x = %d\n",x);
		sum = x;
		flag = 0;
		for(sum=x; sum<=m; sum++)
		{
			find(m,B,0);
			if(flag)
			{
				printf("%d\n",sum);
				break;
			}
		}
	}
	return 0;
} 


代码转载自:https://pan.quark.cn/s/f87b8041184b Language: 中文 欢迎来到戈戈圈! 当你点开这个存储库的时候,你会看到戈戈圈的图标↓ 本图片均在知识共享 署名-相同方式共享 3.0(CC BY-SA 3.0)许可协议下提供,如有授权遵照授权协议使用。 那么恭喜你,当你看到这个图标的时候,就代表着你已经正式成为了一名戈团子啦! 欢迎你来到这个充满爱与希望的大家庭! 「与大家创造更多快乐,与人们一起改变世界。 」 戈戈圈是一个在中国海南省诞生的创作企划,由王戈wg的妹妹于2018年7月14日正式公开。 戈戈圈的创作类型广泛,囊括插画、小说、音乐等各种作品类型。 戈戈圈的目前成员: Contributors 此外,支持戈戈圈及本企划的成员被称为“戈团子”。 “戈团子”一词最初来源于2015年出生的名叫“团子”的大熊猫,也因为一种由糯米包裹着馅料蒸熟而成的食品也名为“团子”,不仅有团圆之意,也蕴涵着团结友爱的象征意义和大家的美好期盼,因此我们最终于2021年初决定命名戈戈圈的粉丝为“戈团子”。 如果你对戈戈圈有兴趣的话,欢迎加入我们吧(σ≧︎▽︎≦︎)σ! 由于王戈wg此前投稿的相关视频并未详细说明本企划的信息,且相关视频的表述极其模糊,我们特此创建这个存储库,以文字的形式向大家介绍戈戈圈。 戈戈圈自2018年7月14日成立至今,一直以来都秉持着包容开放、和谐友善的原则。 我们深知自己的责任和使命,始终尊重社会道德习俗,严格遵循国家法律法规,为维护社会稳定和公共利益做出了积极的贡献。 因此,我们不允许任何人或组织以“戈戈圈”的名义在网络平台或现实中发布不当言论,同时我们也坚决反对过度宣传戈戈圈的行为,包括但不限于与戈戈圈无关的任何...
内容概要:本文详细介绍了一个基于YOLOv8的血细胞智能检测系统全流程开发指南,涵盖从环境搭建、数据准备、模型训练与验证到UI交互系统开发的完整实践过程。项目利用YOLOv8高精度、高速度的优势,实现对白细胞、红细胞和血小板的自动识别与分类,准确率超过93%,单张图像检测仅需0.3秒。通过公开或自建血细胞数据集,结合LabelImg标注工具和Streamlit开发可视化界面,构建了具备图像上传、实时检测、结果统计与异常提示功能的智能系统,并提供了论文撰写与成果展示建议,强化其在医疗场景中的应用价值。; 适合人群:具备一定Python编程与深度学习基础,从事计算机视觉、医疗AI相关研究或项目开发的高校学生、科研人员及工程技术人员,尤其适合需要完成毕业设计或医疗智能化项目实践的开发者。; 使用场景及目标:①应用于医院或检验机构辅助医生进行血涂片快速筛查,提升检测效率与一致性;②作为深度学习在医疗影像领域落地的教学案例,掌握YOLOv8在实际项目中的训练、优化与部署流程;③用于学术论文写作与项目成果展示,理解技术与临床需求的结合方式。; 阅读建议:建议按照“数据→模型→系统→应用”顺序逐步实践,重点理解数据标注规范、模型参数设置与UI集成逻辑,同时结合临床需求不断优化系统功能,如增加报告导出、多类别细粒度分类等扩展模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值