[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\),直接暴力搜就可以了。

叄、關鍵之處 ¶

顯然,題解分析是從 好數本身 再到 好數之和,有時候不要太冒進了,分析基礎的東西才是關鍵。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM