约瑟夫问题:百度百科
问题:
1,2,3,...,n
这
n
个数围成一个圈,然后从
分析:
1,2,3,...,n
第一次删除以后变成了
m+1,m+2,...,n,1,2,...m−1
,对于循环的问题,一般序列
1,2,3,...,n
用
0,1,2,...,n
来表示。用数组
dp[i][j]
表示一共有
i
个数,第
容易得出性质:
对于原问题, i==j ,所以第二维没有任何意义,直接舍掉就好了。
结论:
约瑟夫问题变形
问题:
1,2,3,...,n
这
n
个数围成一个圈,然后从
分析:
不妨还是用 0,1,2,...,n−1 代表原序列。第一次删除后的序列是: 1,2,3,...,n−1 。如果序列只有 n−1 个,那么这个序列是 0,1,2,3,...,n−2 。可以发现前一个序列删除后的序列 a[i] 和 n−1 长度的序列 b[i] 满足 a[i]=(b[i]+j)%n ,那么原来的转移方程:
此时发现后面一维出了问题, dp[i−1][j−1] 不能转移到 dp[i][j] 了。后面的间隔 m 也出了问题。
这里每次删除的间隔是连续的
结论:
那么转移方程就是: