It has been 626 days since the last update, the content of the article may be outdated.
01背包问题
题目需求:有 N件物品和一个容量是 V的背包。每件物品只能使用一次。
第 i件物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
输入格式
第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。
接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i件物品的体积和价值。
输出格式
输出一个整数,表示最大价值。
数据范围
0<N,V≤1000
0<vi,wi≤1000
解决办法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import java.util.Scanner; import java.lang.Math; public class Main{ public static void main(String[] args) { Scanner X = new Scanner(System.in); int N = X.nextInt(); int V = X.nextInt(); int[] v = new int[N + 1] ; int[] w = new int[N + 1] ; for (int i=1 ; i <= N ; i++){ v[i] = X.nextInt(); w[i] = X.nextInt(); } X.close() ; int []x=new int[V+1]; x[0]=0; for (int i = 1; i <= N; i++) { for (int j = V; j >=v[i]; j--) { x[j] = Math.max(x[j], x[j-v[i]] + w[i]); } } System.out.println(x[V]); } }
|