首先我们要找到合法数列的上界,其次考虑如何做使得字典序最小。考虑若干形如 (i,S−i) 的数对,显然这里面最多只能选择一个,如果两个都选那么就能凑出 S 了,所以答案的上界为 ⌊2S−1⌋。现在我们考虑简化问题,我们其实可以通过确定一个合法的集合 B 满足 ∀x∈A,x≤⌊2S−1⌋,据此确定 A。考虑对于之前的数对 (x,y),x<y,若 x∈/B,那么有 y∈A,否则有 x∈B⊆A。现在我们尝试去寻找字典序最小的 B,显然若 B 满足字典序最小则有 A 同样满足字典序最小。
在开始前我们先来证明一个引理。
引理:若 a,b∈B,a+b≤⌊2S−1⌋,则 a+b∈B。
证明考虑反证法。如果 a+b∈/B,那那么有 S−a−b∈A,于是 A 中的元素就能够凑出 S 了。矛盾。
首先我们要明确一点,就是我们从小到大去考虑 i≤⌊2S−1⌋,如果 i 能被选择那么我一定会去选它。这里会有一个问题,就是说为啥这样构造出来的 B 对应的 A 一定合法呢?考虑反证法,首先 B 一定合法,若 A 不合法,那么一定存在一个 x>⌊2S−1⌋ 能与若干 y∈B 凑出 S。因为对于形如 (i,S−i) 的数对只能选择一个数,所以 S−x∈/B。但是因为有若干 y∈B 能够凑出 S−x,根据引理有 S−x∈B,所以矛盾。这样就说明了做法的正确性。