题目描述
https://www.luogu.com.cn/problem/P3147
挺有意思的类似倍增的dp
Solution
我们考虑首先如果合成一个数字,那么一定是用了一个区间的数字
如果数字都是1
的话,那么我们知道左端点就能推出右端点
不是1
的话,我们只需要将右端点存下来即可
我们令f[i][j]
表示左端点是i
,合成数字为j
的右端点是f[i][j]
注意到能合成的最大数字为58
,$2^{18}=262144$
总的时间复杂度为 $O(58n)$
1 |
|
https://www.luogu.com.cn/problem/P3147
挺有意思的类似倍增的dp
我们考虑首先如果合成一个数字,那么一定是用了一个区间的数字
如果数字都是1
的话,那么我们知道左端点就能推出右端点
不是1
的话,我们只需要将右端点存下来即可
我们令f[i][j]
表示左端点是i
,合成数字为j
的右端点是f[i][j]
注意到能合成的最大数字为58
,$2^{18}=262144$
总的时间复杂度为 $O(58n)$
1 | #include <iostream> |