牛牛和牛牛妹来到了攀岩基地,他们选择了一处墙体作为攀岩地点,该面墙体,一共有 n 个踩踏点,从下至上依次编号为 1,2,…,n。
他们在工作人员的带领下领取了一个机械臂,使用一次这个机械臂,可以帮助使用者向上攀登,例如:假设牛牛当前位于第 i 号踩踏点,选择使用机械臂向上攀登 j 个踩踏点的高度,那么,牛牛就会到达第 i+j 号踩踏点。
我们要从地面(位置 0)恰好到达第 n 个踩踏点,每次使用机械臂可向上攀登 1 到 m 个点。目标是在最少使用次数的前提下,输出字典序最小的攀登方案。
最少次数:每次最多上升 m 格,因此最少使用次数 k=⌈n/m⌉,也可写作 (n+m−1)//m。
方案构造:我们需要 k 个正整数之和等于 n,且每个不超过 m。令初始每次都取 m,此时总和为 k×m,比 n 多出 S=k×m−n 。要让总和变为 n,等价于在这 k 个 m 中“减去”总量 S,且每次最多能减 m−1(因为至少要保留 1)。
为了让序列字典序最小,应尽可能先让前面的元素变小: