问题描述:The Joseph's problem is notoriously known. For those who are not familiar with the original problem: from among n people, numbered 1, 2, . . ., n, standing in circle every mth is going to be executed and only the life of the last remaining person will be saved. Joseph was smart enough to choose the position of the last remaining person, thus saving his life to give us the message about the incident. For example when n = 6 and m = 5 then the people will be executed in the order 5, 4, 6, 2, 3 and 1 will be saved.
Suppose that there are k good guys and k bad guys. In the circle the first k are good guys and the last k bad guys. You have to determine such minimal m that all the bad guys will be executed before the first good guy.
参见 http://acm.pku.edu.cn/JudgeOnline/problem?id=1012
我的总体思路是,对从每个 m=k+1, k+2, ... ,计算出前 k 个被杀的人,如果他们的编号都比 k 大,则表示所有所有坏人都被杀掉了,从而找到了最小的 m。
用 rest 表示还有多个人活着,初值为 2k。当 start 表示当前轮从哪个编号开始计算,初值为 1。用 killed 表示当前轮要被杀的人的编号。则 killed = (st

该博客详细介绍了如何解决ACM PKU 1012问题,即在约瑟夫问题的基础上,确定最小的m值,使得k个坏人全部在k个好人之前被处决。博主提出了一种算法,通过模拟从m=k+1开始的每一轮执行过程,更新存活人数和起始位置,直至找到符合条件的m值。算法的关键在于好人的编号始终保持不变,而无需关注坏人的编号变化。此外,博主还提及了原问题的动态规划解法和特殊情况下的解析解。
最低0.47元/天 解锁文章
619

被折叠的 条评论
为什么被折叠?



