题目描述
小明有一个容量为 V 的背包。
这天他去商场购物,商场一共有 N 种物品,第 i 种物品的体积为 wi,价值为 vi,每种物品都有无限多个。
小明想知道在购买的物品总体积不超过 V 的情况下所能获得的最大价值为多少,请你帮他算算。
输入描述
输入第 11 行包含两个正整数 N,V,表示商场物品的数量和小明的背包容量。
第 2∼N+1 行包含 2 个正整数 w,v,表示物品的体积和价值。
1≤N≤103,1≤V≤103,1≤wi,vi≤103。
输出描述
输出一行整数表示小明所能获得的最大价值。
输入输出样例
示例 1
输入
5 20
1 6
2 5
3 8
5 15
3 3
输出
120
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
源码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 小明的背包02 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String[] s=br.readLine().split(" ");
int n=Integer.parseInt(s[0]);
int m=Integer.parseInt(s[1]);
int[] w=new int[n+1];
int[] v=new int[n+1];
int[] dp=new int[m+1];
for (int i = 1; i < n+1; i++) {
s=br.readLine().split(" ");
w[i]=Integer.parseInt(s[0]);
v[i]=Integer.parseInt(s[1]);
}
int ans=0;
for (int i = 1; i < n+1; i++) {
for (int j = w[i]; j < m+1; j++) {
dp[j]=Math.max(dp[j], dp[j-w[i]]+v[i]);
ans=Math.max(ans, dp[j]);
}
}
System.out.println(ans);
}
}