P13404 [GCJ 2010 #3] Fence

题目描述

我们计划建造一段非常长的围栏。我们已经找到了一个合适的地点,现在只需要收集材料。 在本地的五金店,我们可以无限量地购买木板,每块木板有多种不同的长度可选。为了避免浪费,我们希望这些木板的总长度恰好等于我们要建造的围栏长度。 给定围栏的长度以及可用的木板长度,请你计算,为了恰好拼出所需长度,最少需要购买多少块木板? 注意:围栏会非常长!

输入格式

输入文件的第一行包含一个整数 $T$,表示测试用例的数量。接下来有 $T$ 组测试数据。 每组测试数据包含两行。第一行包含用空格分隔的两个整数 $L$ 和 $N$,分别表示围栏的总长度和可购买的不同木板长度的数量。第二行包含 $N$ 个用空格分隔的整数 $B_1, B_2, \ldots, B_N$,表示所有可用的木板长度。

输出格式

对于每组测试数据,输出一行,格式为 "Case #$x$: $M$",其中 $x$ 是测试用例编号(从 1 开始),$M$ 的含义如下: - 如果可以购买一块或多块木板,使得它们的总长度恰好等于 $L$,则 $M$ 为所需木板的最小数量。 - 否则,$M$ 应为字符串 "IMPOSSIBLE"。

说明/提示

**样例解释** 在第一个样例中,最优策略是使用 $2$ 块长度为 $23$ 的木板,$5$ 块长度为 $51$ 的木板,以及 $99999997$ 块长度为 $100$ 的木板。当然,你也可以只用 $100000001$ 块长度为 $100$ 的木板来获得大于 $L$ 的总长度,但这是不允许的。 在第二个样例中,只能拼出偶数长度。 **数据范围** - $1 \leq T \leq 50$。 - $10^{10} \leq L \leq 10^{18}$。 - $1 \leq N \leq 100$。 **小数据集(7 分,测试点 1 - 可见)** - $1 \leq B_i \leq 100$。 **大数据集(22 分,测试点 2 - 隐藏)** - $1 \leq B_i \leq 100000$。 由 ChatGPT 4.1 翻译