P13144 [GCJ 2018 #1C] Ant Stack
题目描述
Scott 有一个蚂蚁农场,里面有 $N$ 只蚂蚁。每只蚂蚁都有一定的体长和体重。
今天,Scott 给蚂蚁们设置了一个挑战:他把一些食物放在蚂蚁农场的顶部。蚂蚁们会尝试通过把自己叠成一根竖直的“蚂蚁塔”来够到食物,每只蚂蚁都直接背着下一只蚂蚁。这样,每只蚂蚁都要承受其上方所有蚂蚁的重量。Scott 的蚂蚁们非常强壮,每只蚂蚁最多可以承受自身重量的 6 倍。例如,一只重 8 毫克的蚂蚁可以承受两只各重 24 毫克的蚂蚁!每只蚂蚁也有一个体长;具体长度不重要,只要它们的长度都不相同即可。
- 蚂蚁塔必须是线性的。除了最顶上的蚂蚁外,每只蚂蚁正上方必须有且只有一只蚂蚁;除了最底下的蚂蚁外,每只蚂蚁正下方必须有且只有一只蚂蚁。
- 蚂蚁塔中蚂蚁的体长必须从下到上严格递减;这保证了每只新加入蚂蚁都能顺利爬到顶部。
- 对于塔中的每只蚂蚁,其上方所有蚂蚁的总重量不得超过该蚂蚁自身重量的 6 倍。
请问最多能有多少只蚂蚁组成这样一根蚂蚁塔?
输入格式
输入的第一行是测试用例数 $T$。接下来有 $T$ 组测试数据。每组数据的第一行为一个整数 $N$,表示蚂蚁的数量。第二行为 $N$ 个整数 $W_1, W_2, ..., W_N$,其中 $W_i$ 表示第 $i$ 只蚂蚁的重量(单位:毫克)。蚂蚁按照体长严格递增的顺序给出。注意,实际长度值未给出,只需关心顺序。
输出格式
对于每组测试数据,输出一行 `Case #x: y`,其中 $x$ 表示测试用例编号(从 1 开始),$y$ 表示最多能组成的蚂蚁塔的蚂蚁数量。
说明/提示
**样例解释**
在样例 1 中,有两只蚂蚁。第一只重 9 毫克,第二只重 1 毫克,且第二只比第一只体长更长。第一只蚂蚁足够强壮,可以承受第二只蚂蚁(因为它能承受 $9 \times 6$ 毫克),但由于第二只蚂蚁体长更长,不能叠在第一只上。第二只蚂蚁无法承受第一只蚂蚁(因为它只能承受 $1 \times 6$ 毫克,小于 9 毫克)。所以只能单独选其中一只蚂蚁组成“蚂蚁塔”。
在样例 2 中,三只蚂蚁可以全部组成一根蚂蚁塔,第三只承受第二只,第二只承受第一只。
在样例 3 中,最优解是第九只蚂蚁在最底下,其上方再叠七只其它蚂蚁。
**数据范围**
- $7 \leqslant T \leqslant 100$。
**测试点 1(16 分,可见)**
- 恰有 6 组数据 $N = 100$;其余 $T-6$ 组 $2 \leqslant N \leqslant 50$。
- $1 \leqslant W_i \leqslant 1000$,对所有 $i$。
**测试点 2(27 分,隐藏)**
- 恰有 6 组数据 $N = 10^5$;其余 $T-6$ 组 $2 \leqslant N \leqslant 500$。
- $1 \leqslant W_i \leqslant 10^9$,对所有 $i$。
由 ChatGPT 4.1 翻译