2040. 【模板】01背包

一个背包有一定的承重 c,有 N 件物品。设数组下标从 1 开始。每件物品都有自己的价值,记录在数组 V 中,也都有自己的重量,记录在数组 W 中,每件物品只能选择要装入还是不装入背包,要求在不超过背包承重的前提下,选出的物品总价值最大。输出能装入背包的物品的最大总价值。

注意空间限制为 16MB

输入

输入一行两个整数物品数量 N(1\le N\le 3000) 承重 c(1\le c\le 3000)

接下来输入一行 N 个整数,第 i 个整数代表 W_i(1\le W_i\le 10^9)

接下来输入一行 N 个整数,第 i 个整数代表 V_i(1\le V_i\le 5\times10^5)

输出

一行一个整数,代表最大总价值。

样例

标准输入 复制文本
4 10
7 3 4 5
42 12 40 25
标准输出 复制文本
65

提示

对样例,选择最后两个物品,重量为 9,价值为 40+25=65,没有任何其他方案总价值更高。

请回忆:一个整型变量通常是 4\ Byte 的;空间限制 16MB 意味着,若你的数组有 K 个元素,则你的数组是 \dfrac{4K}{2^{20}}MB 的,请你自行判断是否会空间超限。 注意当你空间超限时,可能会返回空间超限或运行出错其中一种结果。

对 C/C++ 选手,请将你的静态数组设为全局变量,具体理由参见答疑汇总

登录以提交代码。
单点时限 3 秒
内存限制 16 MB
提交 34
通过 19