【题解】CF1558B Up the Strip 动态规划、O(n log n) 枚举倍数

[题目链接](CF1558B Up the Strip)

\(f[i]\) 为到点 \(i\) 的方案数。

考虑到点 \(i\) 的最后一步,换言之考虑哪些位置可以到点 \(i\)

通过往前跳 \(x\) 步的决策为 \(\sum_{k> i} f[k]\)

考虑哪些位置 \(x\) ,满足存在一个整数 \(k\) 使得 \(\lfloor \dfrac{x}{k} \rfloor = i\)

考虑对每个 \(i\) 枚举倍数 \(k\) ,我们发现对于区间 \(\forall x \in[i\times k,i\times k + k - 1]\) ,满足 \(\lfloor \dfrac{x}{k} \rfloor = i\) ,并且对于不在该区间的任意一个整数都不满足(对应着 \(\mod k \in [0,k-1]\)\(k\) 个连续位置)。

因此总的复杂度为 \(O(\sum_i{\dfrac{n}{i}})=O(n\dfrac{1}{i})=O(n\log n)\)

代码记录

posted @ 2021-09-03 16:56  Themaxmaxmax  阅读(43)  评论(0编辑  收藏  举报