题目描述
blablabla
样例
blablabla
算法1
(暴力枚举) $O(n^2)$
朴素
Java 代码
import java.util.*;
import java.io.*;
public class Main{
private static int N;
private static int V;
private static int[] f;
private static int[] v;
private static int[] w;
private static int[] s;
static BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException{
String[] s1 = cin.readLine().split("\\s+");
N = Integer.parseInt(s1[0]); // 总物品个数
V = Integer.parseInt(s1[1]); // 总体积
f = new int[V+1]; // 前N个物品,总体积是V的情况下总价值最大
v = new int[N + 1]; // 一个长度为N的数组,第i个元素表示第i个物品的体积;
w = new int[N + 1]; // 一个长度为N的数组,第i个元素表示第i个物品的价值;
s = new int[N + 1]; // 一个长度为N的数组,第i个元素表示第i个物品的数量;
for (int i=1 ; i <= N ; i++){
// 接下来有 N 行,每行有两个整数:v[i],w[i],用空格隔开,分别表示第i件物品的体积和价值
String[] s2 = cin.readLine().split("\\s+");
v[i] = Integer.parseInt(s2[0]);
w[i] = Integer.parseInt(s2[1]);
s[i] = Integer.parseInt(s2[2]);
}
for(int i = 1; i <= N;i++){
for (int j = V ; j >= v[i] ; j--){
for(int k = 0; k <= s[i] && k* v[i] <= j ;k++){
f[j] = Math.max(f[j], f[j - k*v[i]] + k*w[i]);
}
}
}
System.out.println(f[V]);
}
}