随笔分类 - 【Algorithms】
摘要:问题描述:n个罪犯被一群人追杀,为了不被敌人杀死,n个罪犯决定通过如下的方式自杀:手拉手围成一圈,并对每个人按顺序编号为:1,2,3,...,n。从1开始报数,报到k的那个人就自杀,再从自杀的下一个人继续从1开始报数,以此类推,我们能够知道最后幸存的那个人的编号吗?解决方法:通过DP能够在O(n)解决问题。首先我们需要递推式:设f(n,k)表示有n个人且报到k的人自杀的情况下,最后幸存的人的编号。f(n,k)=(f(n−1,k)+k−1)%n+1其中 f(1,k)=1。如果有 n 个人且报到 k 的人自杀时,第一个自杀的人一定是编号为 $(k-1) \
阅读全文