AT_arc006_3 [ARC006C] 積み重ね

题目描述

高桥君已经长大成人,决定离开父母独自生活。他需要把行李从卡车搬到新家的房间里,但如果把纸箱平铺在地板上,房间就会被纸箱占满,今晚他就无法铺床睡觉了。 因此,他决定不把纸箱一个个分开放,而是把纸箱适当地堆叠成若干堆。然而,每个纸箱都有一定的重量,如果把比下面纸箱更重的纸箱堆在上面,下面的纸箱就会被压坏。 图示:下面的纸箱必须比上面的纸箱重或相等。 现在,按照从卡车搬运的顺序,给出了每个纸箱的重量。请思考一种堆叠方式,使得不会压坏任何纸箱,并且堆叠出的纸箱堆的数量最少。请输出最少需要多少堆纸箱。 输入按以下格式从标准输入给出。

输入格式

输入共 $N+1$ 行。 - 第 $1$ 行是一个整数 $N$,表示纸箱的数量,$1 \leq N \leq 50$。 - 接下来的 $N$ 行,第 $i+1$ 行给出第 $i$ 个搬运的纸箱的重量 $w_i$,$1 \leq w_i \leq 100,\!000$。

输出格式

输出一行,表示最少需要的纸箱堆的数量。最后请输出换行符。

说明/提示

- 例如输入: ``` 5 4 3 1 2 1 ``` 输出: ``` 2 ``` - 按照示例中的顺序堆叠,可以形成 $2$ 堆纸箱。 - 不能将第 $3$ 个纸箱后面的重量为 $2$ 的纸箱堆在它上面,因此无法只用 $1$ 堆,最少为 $2$ 堆。 - 例如输入: ``` 7 93 249 150 958 442 391 25 ``` 输出: ``` 3 ``` - 如图所示,可以堆成 $3$ 堆。 - 说明:图中的 $225$ 应为 $25$,敬请谅解。 - 例如输入: ``` 4 100 100 100 100 ``` 输出: ``` 1 ``` - 相同重量的纸箱可以堆叠,因此只需 $1$ 堆。 - 例如输入: ``` 6 5 10 15 20 25 30 ``` 输出: ``` 6 ``` - 没有任何纸箱可以堆在前面搬运的纸箱上,因此每个纸箱都单独成堆,最少为 $6$ 堆。 - 例如输入: ``` 15 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 ``` 输出: ``` 6 ``` - 如图所示,这样堆叠时堆的数量最少。 由 ChatGPT 4.1 翻译