#P12912. [POI 2020/2021 R2] 收拾背包 / Pakowanie plecaka

    ID: 12688 Type: RemoteJudge 4000ms 256MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>动态规划 DP线段树平衡树POI(波兰)2021

[POI 2020/2021 R2] 收拾背包 / Pakowanie plecaka

题目背景

翻译来自于 LibreOJ

题目描述

题目译自 XXVIII Olimpiada Informatyczna – II etap Pakowanie plecaka

Bajtazar 准备骑自行车去 Bajtocji 旅游。他现在在考虑要带什么有用的东西在背包里。可惜的是,他没有多少时间,所以他把可能需要的装备按照重要性从高到低排列了一下。他的做法很简单:按顺序检查每个物品,只要不超过背包的承重(当然,要算上之前放进去的物品),就带上它。

还有一个关键的问题:要带什么样的背包呢?Bajtazar 觉得只要带上至少 kk 个物品,他就能在旅途中应付得来。可是他还不确定 kk 到底是多少。那么,他的背包的承重至少应该是多少,才能保证他带上至少 kk 个物品呢?

输入格式

输入的第一行包含一个整数 n (1n5105)n\ (1 \leq n \leq 5\cdot 10^5),表示 Bajtazar 考虑带上的物品的数量。输入的第二行包含 nn 个用空格分隔的整数 $w_{1}, w_{2}, \ldots, w_{n}\ (1 \leq w_{i} \leq 10^{9})$,表示物品的重量,按照 Bajtazar 检查的顺序排列。

输出格式

输出一行 nn 个用空格分隔的整数,第 kk 个数表示能保证 Bajtazar 带上至少 kk 个物品时背包的最小承重。

6
10 8 3 30 5 10
3 13 21 26 36 66

提示

样例 1 解释

输出的第二个数是 1313。如果背包的承重是 1313,那么 Bajtazar 会带上第一个物品(重量为 1010),不会带上第二个物品(因为他只剩下 33 的承重,而物品重量为 88),然后会带上重量为 33 的物品。总共他会带上正好需要的两个物品。

附加样例

  1. 该样例满足 n=20n=20,奇数位置的物品重量为 10810^{8},偶数位置的物品重量为 10910^{9}
  2. 该样例满足 n=200,wi=(imod47)+1n=200, w_{i}=(i \bmod 47)+1
  3. 该样例满足 n=5000n=5000,物品的重量是从区间 [1,109]\left[1,10^{9}\right] 随机选取的。
  4. 该样例满足 $n=5\cdot 10^5, w_{i}=\left\lfloor\frac{(i \bmod 200)}{100}\right\rfloor+1$。
  5. 该样例满足 $n=5\cdot 10^5, w_{i}=\left(F_{i} \bmod 100\right)+1$,其中 F0=0,F1=1,Fi+2=Fi+Fi+1F_{0}=0, F_{1}=1, F_{i+2}=F_{i}+F_{i+1}
  6. 该样例满足 n=5105n=5\cdot 10^5,物品的重量是从区间 [1,109][1,10^{9}] 随机选取的。

详细子任务附加限制及分值如下表所示。

子任务 附加限制 分值
11 n20n \leq 20 88
22 n200n \leq 200 1010
33 n5000n \leq 5000 2020
44 wi2w_{i} \leq 2 88
55 wi100w_{i} \leq 100 2020
66 无附加限制 3434