题目描述
小明有一个容量为 VV 的背包。
这天他去商场购物,商场一共有 NN 件物品,第 ii 件物品的体积为 w_iwi,价值为 v_ivi。
小明想知道在购买的物品总体积不超过 VV 的情况下所能获得的最大价值为多少,请你帮他算算。
输入描述
输入第 11 行包含两个正整数 N,VN,V,表示商场物品的数量和小明的背包容量。
第 2\sim N+12∼N+1 行每行包含 22 个正整数 w,vw,v,表示物品的体积和价值。
1\leq N\leq10^21≤N≤102,1\leq V \leq 10^31≤V≤103,1 \leq w_i,v_i \leq10^31≤wi,vi≤103。
输出描述
输出一行整数表示小明所能获得的最大价值。
输入输出样例
示例 1
输入
5 20
1 6
2 5
3 8
5 15
3 3
输出
37
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
解题代码
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();//数量
int V = scan.nextInt();//容量
int[][] dp = new int[N+1][V+1];
int[] w = new int[N+1];//体积
int[] v = new int[N+1];//价值
for(int i=1; i<=N; i++) {
w[i] = scan.nextInt();
v[i] = scan.nextInt();
}
for(int i=1; i<N+1; i++) {//数量递增
for(int j=1; j<V+1; j++) {//容量递增
if(w[i]>j) {
dp[i][j] = dp[i-1][j];
}else {
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-w[i]]+v[i]);
}
}
}
System.out.println(dp[N][V]);
scan.close();
}
}