Em đang nghĩ đến 1 giải pháp cắt số đi một tí.
Đặt getX(n, k) là số nguyên dương nhỏ nhất sao cho n = f(x) + f(x+1) + ... + f(x+k).
Giả sử x, x + 1,…, x + k có cùng độ dài (với điều kiện nếu x có ít chữ số hơn x + k thì trước x có chữ số 0).
Mỗi số x + i sẽ có dạng \overline{cA_i} (c là 1 chữ số, A_i là 1 hoặc 1 số các chữ số)
Định nghĩa c\ ||\ A = \overline{cA} với c là 1 chữ số, A là 1 số tự nhiên.
TH1. x, x + 1,…, x + k có cùng chữ số hàng cao nhất (chữ số này khác 0).
\displaystyle\Rightarrow f(x) + f(x+1) + ... + f(x+k) = c(k+1) + f(A_0) + f(A_1) + ... + f(A_k). Tất nhiên là dãy A_0, A_1,..., A_k là dãy các số tự nhiên liên tiếp.
\displaystyle \Rightarrow getX(n, k) = \min_{1 \le c \le 9} \left\{c\ ||\ getX(n - c(k+1),\ k)\right\}
TH2. x,… x + j - 1 có cùng chữ số hàng cao nhất và x + j,… x + k có cùng chữ số hàng cao nhất (0 < j \le k).
\Rightarrow x + j - 1 = \overline{c9...9}, x + j = \overline{(c+1)0...0} hay A_{j-1} = 9...9, A_j = 0...0.
\Rightarrow f(x) + f(x+1) + ... + f(x+k)\\
= f(x) + ... + f(x+j-1) + f(x+j) + ... + f(x+k)\\
= cj + f(A_0) + ... + f(A_{j-1}) + (c+1)(k-j+1) + f(A_j) + ... + f(A_k)\\
= cj - j(c+1) + (c+1)(k+1) + f(A_0) + ... + f(A_{j-1}) + f(0) + ... + f(k - j)\\
= -j + (c+1)(k+1) + f(A_0) + ... + f(A_{j-1}) + 0 + ... + (k - j)
(do k \le 9,\ j > 0 \Rightarrow k - j < 9 \Rightarrow f(t) = t\ \forall 0 \le t \le k - j)
\displaystyle = \frac{(k-j+1)(k-j)}{2} - j + (c+1)(k+1) + f(A_0) + ... + f(A_{j-1})
\displaystyle \Rightarrow getX(n, k) = \min_{0 \le c \le 9,\ 0 < j \le k} \left\{c\ ||\ A'\right\}
với
\left\{\begin{matrix}
A' := getX\left(n - \frac{(k-j+1)(k-j)}{2} + j - (c+1)(k+1),\ j-1\right)\\
A' + j = 10...0
\end{matrix}\right.
Tính nốt điều kiện dừng:
getX(n, k) = \left\{\begin{matrix}
0 & if\ n = \frac{k(k+1)}{2}\\
-1 & if\ n < \frac{k(k+1)}{2}\\
\overline{(n \mod 9)9...9} & k = 0,\ n \mod 9 > 0\\
9...9 & k = 0,\ n \mod 9 = 0\\
\text{đệ quy như trên} & if\ n > \frac{k(k+1)}{2}
\end{matrix}\right.
Tuy nhiên, với n đủ nhỏ (n \le 9k) thì hoàn toàn có thể tính được x qua brute force (độ phức tạp O(n k \log n).
Độ phức tạp tổng O(9k \log n + 9k * k\log (9k)) = O(9k \log n + k^2 \log k).