芒课 —— 2464试题

题目描述

谢老师准备建设自己的题库,由于工作量实在太大了,他决定请他的N个学生来帮忙,但是有的同学待在一起就会讲话,不好好干活。他认真观察后发现有m对同学在一起就会互相讲话,所以这m对同学不能同时请来帮忙。

现状谢老师想知道,他请学生帮忙能有多少种不同的方案,请帮助他回答这个问题。

输入说明

第一行两个整数n, m(1 ≤ n ≤ 20,1 ≤ m ≤ 400)。
加下来m行,每行两个不同的整数x,y,表示x同学和y同学在一起就会聊天。

输出说明

一个整数,表示满足条件的方案数。

输入样例

3 2 1 2 2 3

输出样例

5

算法分析

可以采用分治的思想来实现。
用一个二维数组来记录学生之间两两是否会说话,用一个一位数组记录每轮递归中哪些学生已经被选择过。
第一轮先选中第1个学生,然后从第2个学生开始比较,如果第2个学生和第一个学生会相互说话且第一个学生已经被选择了,就不能选第2个学生,只能跳过去选第3个学生(这样一轮一共需要考虑n个学生)。
后面第二轮从第2个学生开始选择,以此类推,求出所有的方案数。

具体代码实现如下:

C++代码

#include <iostream>
// #include &l
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值