用Java实现01背包问题 用贪心算法

贪心算法不是解决01背包问题的有效方法,因为贪心算法只能保证得到一个近似最优解,而无法保证得到最优解。因此,我们需要使用动态规划来解决01背包问题。以下是使用Java实现的动态规划解法:

java 复制代码
public class KnapsackProblem {
    public static int knapSack(int W, int[] wt, int[] val, int n) {
        int[][] dp = new int[n + 1][W + 1];

        for (int i = 0; i <= n; i++) {
            for (int w = 0; w <= W; w++) {
                if (i == 0 || w == 0) {
                    dp[i][w] = 0;
                } else if (wt[i - 1] <= w) {
                    dp[i][w] = Math.max(val[i - 1] + dp[i - 1][w - wt[i - 1]], dp[i - 1][w]);
                } else {
                    dp[i][w] = dp[i - 1][w];
                }
            }
        }

        return dp[n][W];
    }

    public static void main(String[] args) {
        int[] val = {60, 100, 120};
        int[] wt = {10, 20, 30};
        int W = 50;
        int n = val.length;
        System.out.println(knapSack(W, wt, val, n));  // 输出220
    }
}

在上述代码中,我们使用一个二维数组dp来表示当前背包容量和物品数量下的最大价值。初始化时,将数组中的所有元素置为0。然后,使用两个嵌套循环来遍历所有可能的背包容量和物品数量的组合。在每个位置,我们根据当前物品的重量和价值来更新最大价值。最后,返回dp[n][W]即为问题的解。

相关推荐
vortex53 分钟前
php-fpm + nginx 环境搭建配置与常见问题解决
开发语言·nginx·php
赤狐先生6 分钟前
第三步--根据python基础语法完成一个简单的深度学习模拟
开发语言·python·深度学习
yangminlei16 分钟前
Elasticsearch 全面解析:从原理到实战的分布式搜索引擎指南
java·elk
菜宾22 分钟前
java-分布式面试题(事务+锁+消息队列+zookeeper+dubbo+nginx+es)
java·开发语言·分布式
Remember_99324 分钟前
【LeetCode精选算法】位运算专题一
java·开发语言·数据结构·leetcode·哈希算法
橙露25 分钟前
CGO性能深度剖析:成因、评估与优化全指南
java·jvm·myeclipse
点云SLAM27 分钟前
C++内存泄漏检测之编译期 /运行时工具(ASan/Valgrind)
开发语言·c++·内存管理·错误排查·内存泄漏检测工具·valgrind工具·asan工具
逍遥德29 分钟前
Java Stream Collectors 用法
java·windows·python
leaves falling30 分钟前
c语言-编译和链接
c语言·开发语言
kk57931 分钟前
【MATLAB R2018a】路径文件pathdef.m为只读文件无法保存到matlab启动文件夹的问题
开发语言·matlab