AT_abc032_d [ABC032D] ナップサック問題

题目描述

请解决 0/1 背包问题。0/1 背包问题的定义如下: - 有 $N$ 个物品,第 $i\ (1\leq i\leq N)$ 个物品有价值 $v_i$ 和重量 $w_i$。 - 有一个最大承重为 $W$ 的背包。 - 请选择若干个物品放入背包,使得总重量不超过 $W$,并且总价值最大。每个物品最多只能选择一次。

输入格式

输入以如下格式从标准输入读入。 > $N$ $W$ > $v_1$ $w_1$ > $v_2$ $w_2$ > $\vdots$ > $v_N$ $w_N$ - 第 $1$ 行包含两个整数,分别表示物品数量 $N\ (1\leq N\leq 200)$ 和背包的最大承重 $W\ (1\leq W\leq 10^9)$,以空格分隔。 - 接下来的 $N$ 行,每行包含两个整数,第 $i$ 行表示第 $i$ 个物品的价值 $v_i\ (1\leq v_i\leq 10^9)$ 和重量 $w_i\ (1\leq w_i\leq 10^9)$,以空格分隔。 - 下列三个条件中至少有一个成立:「$N\leq 30$」、「所有 $i\ (1\leq i\leq N)$ 满足 $1\leq w_i\leq 1000$」、「所有 $i\ (1\leq i\leq N)$ 满足 $1\leq v_i\leq 1000$」。

输出格式

请输出一个整数,表示能够达到的最大总价值。输出后需换行。

说明/提示

## 部分分 本题设有部分分,满分为 $100$ 分。 - 若正确解决满足 $N\leq 30$ 的数据集 1,可获得 $34$ 分。 - 若正确解决满足 $N\leq 200$ 且所有 $i\ (1\leq i\leq N)$ 满足 $1\leq w_i\leq 1000$ 的数据集 2,可额外获得 $33$ 分。 - 若正确解决满足 $N\leq 200$ 且所有 $i\ (1\leq i\leq N)$ 满足 $1\leq v_i\leq 1000$ 的数据集 3,可额外获得 $33$ 分。 ## 样例解释 1 选择第 $2$ 个和第 $3$ 个物品,总重量为 $10$,总价值为 $16$,可以达到最大价值。该输入输出样例满足数据集 $1,2,3$ 的约束,因此用于所有数据集的评测。 ## 样例解释 2 该输入输出样例仅满足数据集 $1$ 的约束,因此不用于数据集 $2,3$ 的评测。 ## 样例解释 3 该输入输出样例不满足数据集 $3$ 的约束,因此不用于数据集 $3$ 的评测。 ## 样例解释 4 该输入输出样例不满足数据集 $2$ 的约束,因此不用于数据集 $2$ 的评测。 由 ChatGPT 4.1 翻译