CF2128A Recycling Center
题目描述
在回收中心,有 $n$ 个垃圾袋,第 $i$ 个垃圾袋的重量为 $a_i$。每一秒钟,会依次发生以下两个操作:
- 首先,你必须选择一个垃圾袋并销毁它。如果该垃圾袋的重量严格大于 $c$,则需要花费 $1$ 个硬币,否则不需要花费硬币。
- 然后,剩余每个垃圾袋的重量都会变为原来的两倍。
你需要花费的最少硬币数是多少,才能销毁所有垃圾袋?
输入格式
每个测试点包含多组测试数据。第一行包含测试用例数 $t$($1 \le t \le 1000$)。接下来是每组测试数据的描述。
每组测试数据的第一行包含两个整数 $n$ 和 $c$($1 \leq n \leq 30$,$1 \leq c \leq 10^9$)。
每组测试数据的第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 10^9$),表示每个垃圾袋的重量。
输出格式
对于每组测试数据,输出一个整数,表示销毁所有垃圾袋所需的最少硬币数。
说明/提示
在下面的解释中:
- 蓝色数字表示被免费销毁的垃圾袋,
- 红色数字表示被花费 $1$ 个硬币销毁的垃圾袋,
- 黑色数字表示尚未被销毁的垃圾袋。
对于第一个测试用例,一种方案如下:
- $[10, 4, 15, 1, 8]$
- $[\color{blue}{10}, 8, 30, 2, 16]$,$10$ 被免费销毁,因为 $10 \leq 10$。
- $[\color{blue}{10}, \color{blue}{8}, 60, 4, 32]$,$8$ 被免费销毁,因为 $8 \leq 10$。
- $[\color{blue}{10}, \color{blue}{8}, 120, 8, \color{red}{32}]$,$32$ 被花费 $1$ 个硬币销毁,因为 $32 > 10$。
- $[\color{blue}{10}, \color{blue}{8}, 240, \color{blue}{8}, \color{red}{32}]$,$8$ 被免费销毁,因为 $8 \leq 10$。
- $[\color{blue}{10}, \color{blue}{8}, \color{red}{240}, \color{blue}{8}, \color{red}{32}]$,$240$ 被花费 $1$ 个硬币销毁,因为 $240 > 10$。
总共花费了 $2$ 个硬币,并且可以证明这是最优的。
对于第二个测试用例,一种方案如下:
- $[1\,000\,000\,000, 1\,000\,000\,000, 1\,000\,000\,000]$
- $[\color{red}{1\,000\,000\,000}, 2\,000\,000\,000, 2\,000\,000\,000]$,$1\,000\,000\,000$ 被花费 $1$ 个硬币销毁,因为 $1\,000\,000\,000 > 42$。
- $[\color{red}{1\,000\,000\,000}, \color{red}{2\,000\,000\,000}, 4\,000\,000\,000]$,$2\,000\,000\,000$ 被花费 $1$ 个硬币销毁,因为 $2\,000\,000\,000 > 42$。
- $[\color{red}{1\,000\,000\,000}, \color{red}{2\,000\,000\,000}, \color{red}{4\,000\,000\,000}]$,$4\,000\,000\,000$ 被花费 $1$ 个硬币销毁,因为 $4\,000\,000\,000 > 42$。
由 ChatGPT 4.1 翻译