遗传算法解一道笔试题

题目大意如下:

有N个房间,通过N-1个门相连(每个房间的门数在1到3之间),现在有M个路由器,需要把M个路由器放置在其中一些房间中,使得放置路由和其周围的房间能收到wifi信号(假如一个房间放置了路由器,只有它自己以及与它相邻的房间可以收到它的信号)。每个房间都有一个满意度,如果 该房间可以收到WiFi信号则,总的满意度就会累加上该房间的满意度。现在问,怎样放置M个路由器使得总满意度最大。


输入:

第一行两个整数N    M,代表N个房间M个路由器,(2<=N<=1000, 1<=M<=N,    M<=100)

第二行N个数,代表每个房间满意度

接下来N-1行,表示N-1个门,其中每行两个整数,代表门联通的房间号


输出:

最大满意度


样例输入:

5 1
1 2 3 4 5
2 1
3 2
4 2
5 3

7 1
1 2 3 4 5 6 7
2 1
3 2
4 2
5 3
6 2
7 4

7 2
1 2 3 4 5 6 7
2 1
3 2
4 2
5 3
6 2
7 4

8 2
1 2 3 4 5 6 7 8
2 1
3 2
4 2
5 3
6 2
7 4
8 5

样例输出:

16

23

29


分析:首先将题目抽象成N个节点的树,房间为节点,门为边,节点的权值为满意度,接下来从中选择M节点,让它覆盖的权最大。

从N个点中选M个点,有C(N,M)种,可以从两个方面考虑

1.考虑树中的非叶子结点num,分两种情况:

如果num<=M,直接选取非叶子结点放置,如果有剩余则再随便放在叶节点,这样能满足所有房间全覆盖;满意度为所有房间之和。

如果num>M,这种情况比较复杂,我也没分析明白


2.直接用遗传算法解决,每个房间有一个编号,从中选择M个房间。对于基因的编码有两种考虑,这两种方法导致的复杂度相差很大。

(1)染色体长度为M,每一个基因分别代表选中的房间号,整个编码长度较短,交叉复杂度较低。例如:N&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值