package 动态规划;
@SuppressWarnings("all")
public class Main {
public static void main(String[] args) {
int[] weight = {2, 2, 6, 5, 4};
int[] values = {6, 3, 5, 4, 6};
int Capcity = 10; //背包容量
int res = MaxValue(weight, values, Capcity);
System.out.println("得到的最大价值为:" + res);
}
public static int MaxValue(int[] w,int[] v,int c) {
int n = w.length;
int[][] dp = new int[n + 1][c + 1]; //dp[i][j]表示前i个物品背包容量为j的条件下的最大价值
//初始化
for(int i = 0; i < (n + 1); i++) {
dp[i][0] = 0; //没有容量
}
for (int i = 0; i <= c; i++) {
dp[0][i] = 0; //没有物品
}
//填表
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= c; j++) {
if(j < w[i - 1]) { //即使背包满容量也装不下第i个物品
dp[i][j] = dp[i - 1][j];
}else {
//背包有装下第i个物品的可能
/*分析:能够装下的话,那就是能装和不能装,
*装的话背包需要为第i个物品预留它的重量w[i-1],则是在前i-1个物品的重量为j-w[i-1]的基础上进行判断
*不装的话则它的最大价值一定等于不装第i个物品的最大价值
* */
dp[i][j] = Math.max(dp[i - 1][j],dp[i - 1][j - w[i-1]] + v[i - 1]);
}
}
}
return dp[n][c];
}
}
动态规划法求解0/1背包问题
最新推荐文章于 2024-08-02 18:20:17 发布