题目链接:https://www.nowcoder.com/questionTerminal/708f0442863a46279cce582c4f508658
来源:牛客网
现有一个容量大小为V的背包和N件物品,每件物品有两个属性,体积和价值,请问这个背包最多能装价值为多少的物品?
输入描述:
第一行两个整数V和n。
接下来n行,每行两个整数体积和价值。1≤N≤1000,1≤V≤20000。
每件物品的体积和价值范围在[1,500]。
输出描述:
输出背包最多能装的物品价值。
示例1
输入
6 3
3 5
2 4
4 2
输出
9
dp数组的行数是n+1行,这样第0行初始值basecase全部为零,不用自己再去赋初始值了。
看不懂了,看这篇博客对01背包的分析与理解(图文)
dp[i][j]:用1~i之间的商品去填充j空间大小的最大价值
dp[i][j] 分为两种情况:
- 第i件商品可以放入j空间则: dp[i][j] =Math.max(dp[i-1][j],dp[i-1][j-cost[i]]+value[i]);
- 第i件商品不可以放入j空间则:1~i之间的商品去填充j空间大小的最大价值只能是用1至i-1之间的商品去填充。
背包最多填充的价值是dp[n][v],即用1~n之间的商品填充v空间大小的最大价值。
import java.util.Scanner;
public class Main{
public static void main(String[]args){
Scanner scan = new Scanner(System.in)