[ARC123C]1, 2, 3 - Decomposition

壹、题目描述 ¶

传送门 to Atcoder.

贰、题解 ¶

前言

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

正文

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


◆ 好数之和的结构

我们将一个数 \(A_i\) 写成 \(A_i=10a_i+b_i\),那么,如果 \(A_i\) 是好的,它一定同时满足:

  • \(b_i\in\{1,2,3\}\)
  • \(a_i\) 是一个好数或者 \(0\)

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

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

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


\(\rm DP\) 的设计

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

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

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

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

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


\(K\) 的上界以及时间复杂度

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

  • \(\forall i\in [1,10],f(i)\le 5\),打表或者手玩.....;
  • \(\forall N>10,\exists K\le 5,r\in[K,3K]\;\text{s.t.}\;N-r=\left\lfloor{N\over 10}\right\rfloor\),所以上界很容易发现是 \(5\),这是最大情况了;

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

叁、关键之处 ¶

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

posted @ 2021-07-20 12:09  Arextre  阅读(280)  评论(6编辑  收藏  举报