【墨鳌】【经典问题】【约瑟夫环~记忆化搜索】
题目链接
题解链接
解题思路
- 经典约瑟夫环
plus经典记忆化搜索技巧 - \(f(n,m)=\begin{cases}0 & (n=0)\\ [f(n-1,m)+m]\%n&(n>0)\end{cases}\)
代码
class Solution {
public:
struct pair_hash {
inline size_t operator()(const pair&p)const{
return (((unsigned)p.first<<17)+p.second);
}
};
unordered_map,int,pair_hash>josephus;
int lastRemaining(int n, int m) {
auto state=make_pair(n,m);
if(josephus[state])return josephus[state];
return josephus[state]=(n?(lastRemaining(n-1,m)+m)%n:1);
}
};