解题思路
实验室有重量分别为 1 克到 n 克的砝码各一枚。对于每次目标重量 k,需要判断是否能选出若干枚砝码,使总重量恰好等于 k,并输出一种选法。
由于砝码重量是 {1,2,…,n},这是一个连续整数集合。设 S=2n(n+1) 表示所有砝码的总重量。
- 若 k>S,显然无法凑出目标重量,直接输出
-1。
- 若 k≤S,则一定可以构造出解。构造方法采用贪心策略:从大到小扫描砝码重量 i=n,n−1,…,1。对于当前重量 i,如果 k≥i,则选择这枚砝码,并将剩余重量更新为 k=k−i。当 k 变为 0 时停止。
- 该贪心的正确性基于 {1,…,n} 是规范的硬币系统,在 k≤S 时总能用最大可选砝码的贪心方式得到一种解。