CF914C

problem & blog


数位 dp 模板题。

经过一次操作,可以把 \(n\) 变成一个小于 \(10^3\) 的数。

所以我们可以把所有小于 \(10^3\) 的数操作的次数全部处理出来。

然后就是正常的数位 dp。

定义 \(dp_{s,num,lim}\) 表示剩 \(s\) 位,有 \(num\) 个数,是不是在上线的情况数。

然后直接记忆化搜索就行了。

所以就看一下一个是 \(1\) 还是 \(0\)

如果不在上界:

所以就会去到 \((s - 1,num + 1,0)\)\((s - 1,num,0)\) 两种状态。

否则:

如果这一位固定是 \(0\),则去到 \((s - 1,num,0)\),否则去到 \((s - 1,num + 1,0)\)\((s - 1,num + 1,1)\)

就结束啦!


code

posted @ 2024-01-12 16:16  sqrtqwq  阅读(6)  评论(0编辑  收藏  举报