郊游 ID:PICNIC
题目大意
仙女星幼儿园的快班小朋友们下周要到粟洞公园郊游。带队教师想在郊游时让两名学生组成一个小队进行活动。不过让两名不是朋友的学生组成一队会发生争执或者互不理睬。因此,必须由两名朋友关系的学生组队。
给定各学生的朋友关系详情,编写程序计算出所有可配对的不同方法。任何一个不相同的配对都将被视为一种不同的配对方法。例如,以下两种配对方法就属于不同的配对方法。
●(泰妍,杰西卡)(珊妮,蒂芬妮)(孝渊,俞利)
●(泰妍,杰西卡)(珊妮,俞利)(孝渊,蒂芬妮)
解题思路:
为了使用递归调用,首先将整个操作过程分解为几个小的操作。这道题中,将整个问题分解为m/2个小操作,每个小操作等同于对两名学生的组队。此时问题将变为“给定还未组队的学生名单时,计算出两名朋友间组成小队的组合个数”。因为名单中找出两名互为朋友关系的学生组队后,对剩下学生的组队又相当于前一步骤的操作过程。
出现的问题:
计算组合个数时会经常遇到重复相同答案的现象。为了解决这种错误,可采取只计算特定形态答案的方法。通常使用的方法是,在相同答案中以字典顺序只选择最先得到的答案。例如,忽略(2,3)、(0,1)或(1,0)、(2,3),而选择(0,1)、(2,3)。
为了强制这种属性,在各操作阶段只为序号最靠前的学生配上伙伴,即可解决前面提到的两种问题。对序号最靠前的学生而言,其伙伴的序号肯定比其靠后,所以不可能得到像(1,0)这一类的答案。又因为总是从序号最靠前的学生开始配对,所以也不可能出现像(2,3)、(0,1)这一类答案。代码6-5是按照这种思路编写的代码。
int n ;
bool areFriend[10][10];
// 若第take[i] = i 个学生找到了伙伴,则返回true,否则为false
int countPairings(bool take[10]){int firstFree = -1;for(int i =0;i<n;++i){if(!take[i]){firstFree = i;break;}}//所有的学生都匹配上了if(firstFree == -1)return 1;int ret = 0;//选择与学生组队的伙伴for(int pairWith = firstFree+1;pairWith<n;++i){if(!take[pairWith]&&areFriend[firstFree][pairWith]){take[firstFree] = take[pairWith] = true;ret += countPairings(take);take[firstFree] = take[pairWith] = false;}}return ret;
}
郊游 ID:PICNIC相关推荐
- AB级 考试高频词 1000个
AB级 考试高频词 1000个 1 能力 ability 46 申请 application 91 街区 block 2 在船上 aboard 47 欣赏;感激 appreciate 92 女衬衫 b ...
- 全国省市区数据SQL - 省市区
DROP TABLE IF EXISTS `provinces`; CREATE TABLE `provinces` (`id` int(11) NOT NULL auto_increment,`pr ...
- Open edX数据结构Mysql edxapp
原文出处:http://wiki.edustack.org/doku.php?id=edx:edxapp%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BB%93%E6%9E%84 CR ...
- redisson get()数据报错,missing type id property ‘@class’
redisson get()数据报错: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when ...
- IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...
使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解 一.使用Hibernate自动生成实体类 1.在项目上右键,选择Add Framework Support找到 Hibern ...
- Pytorch - GPU ID 指定 pytorch gpu 指定
PyTorch 关于多 GPUs 时的指定使用特定 GPU. PyTorch 中的 Tensor,Variable 和 nn.Module(如 loss,layer和容器 Sequential) 等可 ...
- OPPO海外官方调试ID
自己的ID出不来广告时可以使用官方调试ID. 注意包名和ID是绑定的,同时要修改包名.
- Spinner 使用的使用 报错:ArrayAdapter requires the resource ID to be a TextView
Spinner 使用的使用 报错:ArrayAdapter requires the resource ID to be a TextView 的问题 是修改layout的最外成不是使用TextVie ...
- java.lang.IllegalArgumentException: No view found for id 0x7f07005f (xx) for for fragment xxFragment
问题的原因的是自己修改id 的时候弄错了修改下id 就好了 我的是用activity 加载fragment 使用的地方如下 ,确定下面的id 是否在布局中 transaction.add(R.id.c ...
最新文章
- Spring总结之SpringMvc下
- 内存分段分页机制理解_深入理解虚拟机,JVM高级特性-自动内存管理机制
- Qt 调试Caffe
- 第2章[2.4] Ext JS的类与类体系
- Android -- Sqlite事务
- pthread_mutex_init 互斥锁pthread_mutex_t的使用(转)
- maria安装包mysql_Redhat 7.3安装系统自带Mariadb安装包
- 安卓系统和安卓服务器地址,给安卓应用配置服务器地址
- 总结——达内视频(二)
- 合并报表excel自动模板_自动合并
- Python 第二章 字典
- 纯css画三角形/梯形(兼容ie6)
- 关于深度学习人工智能模型的探讨(一)(1)
- 开源·共享·创新|2020年中国.NET开发者大会圆满收官!
- 计算机输入开机密码无法进入,电脑开机无法输入密码怎么办
- 生活小妙招-通马桶(这是一篇有味道的博客~)
- 爬虫系列 一次采集.NET WebForm网站的坎坷历程
- UCOSIII系统任务
- Python学习笔记(一)压缩与解压缩文件
- 摄像头拍摄运动物体,产生运动模糊/拖影的原因分析
热门文章
- 广角相机app哪个比较好用_推荐一款比较好用的工作安排备忘app?
- linux dmesg命令(显示开机信息)
- JavaScript学习笔记(4)
- 【放置奇兵】英雄各属性介绍
- windows下如何查看设备的idVendor(厂商标识)和idProduct(产品标识)?
- 数字类型及常用的数学函数(Python)
- 字典、列表、元祖、字符串的综合(2)
- Python多线程threading和多进程multiprocessing的区别及代码实现
- PAT乙级题目答案汇总PAT (Basic Level) Practice (中文)
- QT安卓web使用mysql_Qt使用MySQL笔记一