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