P10240 [THUSC 2021] 搬东西

题目描述

有 $n$ 件物品,编号为 $1$ 到 $n$,编号为 $i$ 的物品重量记为 $a_i$,是一个正整数。 只有一个可用的箱子,它最大可容纳的重量是一个正整数 $m$。物品被分批搬运,每批搬走其中一部分,直至所有物品都被搬走。每个批次被搬走的物品是当时剩下物品的一个子集,按如下策略选择: 选择重量之和不超过 $m$ 且包含物品数量最多的方案,如果有多种数量最多的方案,则将被选择的物品编号从小到大排列成一个序列,选择使这个序列字典序最大的方案。 请计算出依此策略会分成多少批次来搬运。

输入格式

输出格式

说明/提示

**【样例解释 #1】** 第一次最多可以搬运 $6$ 件物品,编号序列为 $6, 7, 8, 9, 10, 11$。 第二次最多可以搬运 $3$ 件物品,这时有 $4$ 种数量最大的方案: + 编号序列 $1, 2, 3$。 + 编号序列 $1, 2, 5$。 + 编号序列 $1, 3, 5$。 + 编号序列 $2, 3, 5$。 选择字典序最大的 $2, 3, 5$。 第三次最多可以搬运 $1$ 件物品,编号序列为 $4$。 第四次最多可以搬运 $1$ 件物品,编号序列为 $1$。 **【子任务】** |子任务|分值|$n$|$m$| |:----:|:----:|:----:|:----:| |$1$|$5$|$n \leq 20$|$m \leq 100$| |$2$|$25$|$n \leq 500$|$m \leq 10^9$| |$3$|$20$|$n \leq 3000$|$m \leq 10^9$| |$4$|$10$|$n \leq 50000$|$m \leq 10$| |$5$|$40$|$n \leq 50000$|$m \leq 10^9$| 全部数据满足: + $1 \leq n \leq 50000$,$1 \leq m \leq 10^9$; + 所有物品的重量满足 $1 \leq a_i \leq m, \ i=1 \dots n$。 **【提示】** 对于两个等长且不相同的序列 $a$ 和 $b$,如果序列中的元素可以比较大小,那么 $a$ 与 $b$ 的字典序大小关系如下定义:从前向后找到第一个位置 $i$ 使 $a_i \neq b_i$,若 $a_i < b_i$ 则 $ab_i$ 时 $a>b$。 在本题中,$a$ 和 $b$ 是两个搬运方案中涉及的物品编号序列,元素之间的大小关系指的就是编号之间的整数比较。 ### 题目使用协议 来自 清华大学 2021 年全国优秀中学生信息学体验营 (THUSC 2021)。 以下『本仓库』皆指 THUSC 2021 官方仓库([https://gitlink.org.cn/thusaa/thusc2021](https://gitlink.org.cn/thusaa/thusc2021)) 1. 任何单位或个人都可以免费使用或转载本仓库的题目; 2. 任何单位或个人在使用本仓库题目时,应做到无偿、公开,严禁使用这些题目盈利或给这些题目添加特殊权限; 3. 如果条件允许,请在使用本仓库题目时同时提供数据、标程、题解等资源的获取方法;否则,请附上本仓库地址。 4. 清华大学计算机系保留一切权利。