unordered_map<uint64_t, uint64_t> ump;
uint64_t solve(uint64_t n) {
if (ump.count(n))
return ump[n];
uint64_t p = cube(n - 1);
uint64_t c = p * p * p;
uint64_t res = solve(c) + solve(n - c) + (n - c);
ump[n] = res;
return res;
}
如果提前预处理 [1,m]∩Z 的值,单次计算 solve(n) 的时间复杂度大约是多少?占用的空间大约是多少?
这里 cube 是计算立方根的函数(不是立方),您可以将它视为 O(1) 或 O(logn)。
也就是说,代码中 c 的值是 ⌊3n⌋3.
已知 1e17 能在 1s 内跑完。