一,小明的背包1
1.题目描述:
小明有一个容量为 VV 的背包。
这天他去商场购物,商场一共有 NN 件物品,第 ii 件物品的体积为 wiwi,价值为 vivi。
小明想知道在购买的物品总体积不超过 VV 的情况下所能获得的最大价值为多少,请你帮他算算。
输入描述
输入第 11 行包含两个正整数 N,VN,V,表示商场物品的数量和小明的背包容量。
第 2∼N+12∼N+1 行包含 22 个正整数 w,vw,v,表示物品的体积和价值。
2.实例:
示例 1
输入
5 20
1 6
2 5
3 8
5 15
3 3
输出
37
3.思路:
-
输入读取:使用
Scanner
读取输入的物品数量N
和背包容量V
。 -
初始化动态规划数组:
dp
数组的大小为V + 1
,初始值全为0。 -
处理每个物品:对于每个物品,读取其体积
w
和价值v
,然后从背包容量V
到w
逆序更新dp
数组。 -
状态更新:在逆序循环中,更新
dp[j]
为当前值和不放入当前物品时的最大价值加上当前物品价值的较大者。 -
输出结果:最终
dp[V]
即为背包容量为V时的最大价值。
4:代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int V = scanner.nextInt();
int[] dp = new int[V + 1];
for (int i = 0; i < N; i++) {
int w = scanner.nextInt();
int v = scanner.nextInt();
for (int j = V; j >= w; j--) {
dp[j] = Math.max(dp[j], dp[j - w] + v);
}
}
System.out.println(dp[V]);
}
}