关注
隐藏条件:可以将多人的血液混合后使用一个试剂盒进行检测,有一人及以上的血液中含有病毒,则试剂盒显示为阳性,否则试剂盒显示为阴性.
思考方向:递归求解
检测过程拆解:
假设一共有N人,其中p人感染病毒(1<=p<=N),记S(N, p)表示解决问题需要花费的试剂盒数量.
1) 显然有递归边界:S(N, N) = 0,其含义是N人全感染则使用0个试剂盒就能解决问题.
2) 假设只有一位检测医生,即试剂盒的使用是串行的,不能并行使用试剂盒,只有当上一个试剂盒的结果出来后,才能去仓库拿取下一个试剂盒.
所以,检测医生当前手上的这个试剂盒只有两种使用方式:一是只检测一个人,二是从待检测人中抽取多人进行混合血液检测.
设医生从N人中随机抽取k人(1<=k<=N-p),然后将他们的血液混合后导入试剂盒,
① 当 p = 1 时(即N中只有一人感染的情况),
如果k个人混血检测结果为阳性,说明仅有的一位感染者在这k人当中,即S(N, 1) = S(k, 1) + 1,加一是指已经耗费的一个试剂盒;如果k个人混血检测结果为阴性,说明仅有的一位感染者在剩余的N-k人当中,即S(N, 1) = S(N-k, 1) + 1.
我们使用两者最坏的情况进行计算,因此,S(N, 1) = max{S(k, 1) + 1, S(N-k, 1) + 1}.
② 当 p > 1 时(即N中有多人感染的情况),
a) 当 k < p 时(此时不管k人混血检测结果阴阳,N-k人中肯定还存在感染者)
如果(k人检测结果为阴性){
S(N, p) = S(N-k, p) + 1
}
否则{
k人中和N-k人中都有感染者.
例如p=5,则有(1,4)(2,3)(3,2)(4,1)四种可能性,比如(1,4)这种情况成递推公式就是:
S(N, 5) = S(k, 1) + S(N-k, 4) + 1.
}
最后,取各个情况最大值.
查看原帖
1 评论
相关推荐
05-29 19:51
上海计算技术研究所 计算机类 点赞 评论 收藏
转发
点赞 评论 收藏
转发
点赞 评论 收藏
转发
牛客热帖
正在热议
# 和牛牛一起刷题打卡 #
11172次浏览 921人参与
# 实习生应该准时下班吗 #
90169次浏览 681人参与
# 牛客帮帮团来啦!有问必答 #
1072464次浏览 16132人参与
# 通信硬件薪资爆料 #
252351次浏览 2375人参与
# 机械制造薪资爆料 #
349727次浏览 4107人参与
# 本周投递记录 #
219294次浏览 5358人参与
# 你收到了团子的OC了吗 #
527560次浏览 6256人参与
# 晒一晒我的offer #
3746636次浏览 57799人参与
# 你已经投递多少份简历了 #
335907次浏览 4883人参与
# 你怎么评价今年的春招? #
10874次浏览 180人参与
# 硬件人的简历怎么写 #
81562次浏览 847人参与
# 我发现了面试通关密码 #
379650次浏览 7007人参与
# 我想象的工作vs实际工作 #
104970次浏览 1693人参与
# 春招你拿到offer了吗 #
400018次浏览 5771人参与
# 担心入职之后被发现很菜怎么办 #
38163次浏览 317人参与
# 腾讯工作体验 #
152061次浏览 1485人参与
# 2022毕业的你对23届的寄语 #
16644次浏览 353人参与
# 毕业租房也有小确幸 #
39098次浏览 3274人参与
# 产品面经 #
47055次浏览 868人参与
# 浅聊一下我实习的辛苦费 #
101501次浏览 1021人参与