1579. [算法课动态规划]背包问题

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

输入

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

接下来输入一行 NN 个整数,第 ii 个整数代表 Wi(1Wi500)W_i(1\le W_i\le 500)

接下来输入一行 NN 个整数,第 ii 个整数代表 Vi(1Vi107)V_i(1\le V_i\le 10^7)

输出

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

样例

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

提示

对样例,物品数量为 N=4N=4,背包承重为 c=10c=10 每个商品重量为 W=[7,3,4,5]W=[7,3,4,5],价值为 V=[42,12,40,25]V=[42,12,40,25],选择最后两个物品,重量为 99,价值为 40+25=6540+25=65,没有任何其他方案总价值更高。

可以动态规划方法求解。

分析两种情况:

  1. ii 个物品放不进去背包: Wi>jW_i > j ;
  2. 可以放进去,但是可以选择放进去或者不放:WijW_i \le j;

登录以提交代码。
单点时限 1 秒
内存限制 256 MB
提交 4941
通过 2239