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

复制代码
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);
    }
}
相关推荐
程序员三明治2 分钟前
【面试手撕】如何构造二叉树输入用例?ACM模式,路径总和2解题思路
算法·leetcode·面试·acm·构造二叉树·路径总和
wenjianhai3 分钟前
若依(RuoYi-Vue-Plus)框架使用WebSocket
java·若依
Coder_Boy_4 分钟前
基于SpringAI的在线考试系统-核心模块的数据模型交互关系
java·数据库·人工智能·spring boot·交互
yaoxin5211235 分钟前
295. Java Stream API - 选择适用于并行计算的 BinaryOperator
java·开发语言
We....5 分钟前
SpringBoot 微服务拦截器与负载均衡实践
java·spring boot·微服务·负载均衡
冬至喵喵6 分钟前
RoaringBitmap与传统Bitmap
java·开发语言
better_liang9 分钟前
Java技术栈中的MySQL数据结构应用与优化
java·数据结构·mysql·性能调优·索引优化
Swift社区12 分钟前
Spring Boot 配置文件未生效
java·spring boot·后端
计算机程序设计小李同学12 分钟前
基于Web和Android的漫画阅读平台
java·前端·vue.js·spring boot·后端·uniapp
干前端14 分钟前
Message组件和Vue3 进阶:手动挂载组件与 Diff 算法深度解析
javascript·vue.js·算法