实现一个动态规划算法,解决背包问题

复制代码
public class Test_31 {
    // 动态规划解决0-1背包问题
    public int knapsack(int capacity, int[] weights, int[] values, int n) {
        // 创建一个二维数组dp,用于记录状态转移过程
        int[][] dp = new int[n + 1][capacity + 1];

        // 遍历物品
        for (int i = 1; i <= n; i++) {
            // 遍历背包容量
            for (int w = 1; w <= capacity; w++) {
                if (weights[i - 1] > w) {
                    // 当前物品重量大于背包容量,无法放入,取上一个状态的值
                    dp[i][w] = dp[i - 1][w];
                } else {
                    // 否则比较放入当前物品和不放入当前物品两种情况的最大价值
                    dp[i][w] = Math.max(dp[i - 1][w], values[i - 1] + dp[i - 1][w - weights[i - 1]]);
                }
            }
        }

        // 返回背包问题的最优解
        return dp[n][capacity];
    }

    public static void main(String[] args) {
        Test_31 knapsackProblem = new Test_31();
        int capacity = 15;
        int[] weights = {2, 3, 4, 5};
        int[] values = {3, 4, 5, 6};
        int n = weights.length;

        // 计算获得的最大价值
        int maxValue = knapsackProblem.knapsack(capacity, weights, values, n);
        System.out.println("The maximum value that can be obtained is: " + maxValue);
    }
}
相关推荐
你撅嘴真丑1 小时前
第九章-数字三角形
算法
曹牧1 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
uesowys1 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
ValhallaCoder1 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮1 小时前
AI 视觉连载1:像素
算法
爬山算法2 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
智驱力人工智能2 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
kfyty7252 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎2 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄2 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea