atcoder arc123 C题 1, 2, 3 - Decomposition
1|0题目大意
给出 , 求出最少的数满足每个数位上只为 且所有数的和为
2|0题解
首先, 我们可以有一个结论: 对于任意两个数位, 当 , 则数位大于等于 的数的个数不多于数位大于等于 的数的个数。
证明: 若一个数, 它的数位大于等于 , 因为 , 所以它的数位一定大于等于 。
有了这个性质, 接下来再考虑题怎么做。
看到这里的最少个数, 比较好想到的应该是二分, 因为它貌似好像有单调性。 但仔细观察后你会发现, 这东西压根就不是单调的。
比如 时, 只能用一个数凑出来, 多一个少一个都不行, 那么我们就只好换一种方法了。
既然刚才推出来的结论和位数有关, 那我们是不是该用这个结论做些什么呢? 比如, 用每位数上是几去做一个 DP 。
首先考虑状态, 既然我们要个数尽量少, 那么就需要每一个数位状态上的数尽量少, 而且我们还要考虑可以进位的情况, 所以定义状态为 表示在 位进位小于等于 可以使 位及之前的数与 中相同位置的数相同 , 且 位为 的时候的最少个数。 我们考虑可以通过全填 来算出能不能用至少 个 ~ 来凑出 。而我们也可以用 来算出没有限制时最少要用多少个 ~ 来凑出 。 那么, 就可以得到函数:
对于每个数位, 我们都可以通过前一个数还剩下的与自己本身这一位规定组成一个数, 这就是我们要在个数大于等于上一次的个数这一限制下需要凑出的数。
最后, 我们就可以定义初始状态了。
因为 的最高位没有进位, 所以对于 的最高位 , 所有大于 的状态都不存在, 设为 , 其它的直接用 构造。
代码:
__EOF__

本文链接:https://www.cnblogs.com/flower-dream/p/1-2-3-Decomposition_Answer.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!