[ARC123C]1, 2, 3 - Decomposition

壹、题目描述 ¶

传送门 to Atcoder.

贰、题解 ¶

前言

只能说什么结论都想不到了,真的啊......至少打个表嘛,这样或许还能发现 i,f(i)5 这个结论......

正文

将用 1,2,3 组成的数成为好的。那么我们的题意就变成,对于一个 N,最少需要多少个好的数能够组成它。


◆ 好数之和的结构

我们将一个数 Ai 写成 Ai=10ai+bi,那么,如果 Ai 是好的,它一定同时满足:

  • bi{1,2,3}
  • ai 是一个好数或者 0

所以,如果一个数能够被 K 个好数之和所表示,一定是以下两部分之和

  1. 一个在 [K,3K] 范围内的整数;
  2. 至多 K 个好数之和乘上 10

然后,我们可以使用一个比较暴力的 DP 来解决问题。


DP 的设计

定义 f(i) 表示 i 最少可以被多少好数之和所表示。

假设对于 N,我们已经知道了 f(x)(x<N) 的值,那么,我们可以设计下面的转移:

首先,暴力从小开始枚举一个 K,表示 N 能被多少好数所表示,那么我们这样转移:

  • 枚举一个 r[K,3K]
  • 如果存在 x 满足 N=10x+rf(x)K,那么 N 即可表示为 K 个好数之和;

至于复杂度?似乎和 K 有关。但是 K 上界会是多少呢?


K 的上界以及时间复杂度

对于 K 的上界,我们可以使用归纳法证明:

  • i[1,10],f(i)5,打表或者手玩.....;
  • N>10,K5,r[K,3K]s.t.Nr=N10,所以上界很容易发现是 5,这是最大情况了;

那么,复杂度就有了保障,我们不用做 DP,直接暴力搜就可以了。

叁、关键之处 ¶

显然,题解分析是从 好数本身 再到 好数之和,有时候不要太冒进了,分析基础的东西才是关键。

posted @   Arextre  阅读(283)  评论(6编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2020-07-20 [CF1375E]Inversion SwapSort
2020-07-20 [CF912E]Prime Gift
2020-07-20 [CF1257F]Make Them Similar
2020-07-20 [CF632F]Magic Matrix
2020-07-20 [CF799E]Aquarium decoration
2020-07-20 [CF1327F]AND Segments
2020-07-20 [CF1059]Nature Reserve
点击右上角即可分享
微信分享提示