【20141106noip训练】动态规划第二题:血缘关系

这是一篇关于利用动态规划和概率计算解决妖怪家族血缘关系相似度问题的博客。通过建立Family Tree模型,使用递推关系P(A, B) = (P(A0, B) + P(A1, B)) / 2来计算妖怪间的基因相似程度。文章介绍了算法分析、边界条件和递推公式,并指出此问题更适合采用记忆化搜索来实现,时间复杂度为O(Cn^2)。" 70174627,5762217,Wireshark过滤表达式详解,"['网络抓包', '协议分析', '数据包过滤']
摘要由CSDN通过智能技术生成

8.2    血缘关系

源程序名            family.???(pas, c, cpp)

可执行文件名        family.exe

输入文件名          family.in

输出文件名          family.out

【问题描述】

    我们正在研究妖怪家族的血缘关系。每个妖怪都有相同数量的基因,但是不同的妖怪的基因可能是不同的。我们希望知道任意给定的两个妖怪之间究竟有多少相同的基因。由于基因数量相当庞大,直接检测是行不通的。但是,我们知道妖怪家族的家谱,所以我们可以根据家谱来估算两个妖怪之间相同基因的数量。

    妖怪之间的基因继承关系相当简单:如果妖怪C是妖怪A和B的孩子,则C的任意一个基因只能是继承A或B的基因,继承A或B的概率各占50%。所有基因可认为是相互独立的,每个基因的继承关系不受别的基因影响。

   现在,我们来定义两个妖怪X和Y的基因相似程度。例如,有一个家族,这个家族中有两个毫无关系(没有相同基因)的妖怪A和B,及它们的孩子C和D。那么C和D相似程度是多少呢?因为C和D的基因都来自A和B,从概率来说,各占50%。所以,依概率计算C和D平均有50%的相同基因,C和D的基因相似程度为50%。需要注意的是,如果A和B之间存在相同基因的话,C和D的基因相似程度就不再是50%了。

    你的任务是写一个程序,对于给定的家谱以及成对出现的妖怪,计算它们之间的基因相似程度。

【输入】

       第一行两个整数n和k。n(2≤n≤300)表示家族中成员数,它们分别用1, 2, …, n来表示。k(0≤k≤n-2)表示这个家族中有父母的妖怪数量(其他的妖怪没有父母,它们之间可以认为毫无关系,即没有任何相同基因)。

       接下来的k行,每行三个整数a, b, c,表示妖怪a是妖怪b的孩子。

       然后是一行一个整数m(1≤m≤n2),表示需要计算基因相似程度的妖怪对数。

       接下来的m行,每行两个整数,表示需要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值