Java数据结构与算法(多重背包)

前言:

多重背包问题(Multiple Knapsack Problem, MKP)是背包问题的一个变种。在这种问题中,你有多个背包,每个背包都有一定的容量。你需要选择一些物品放入这些背包中,以使放入物品的总价值最大化。每个物品都有一个价值和一个重量,并且可以被放入一个或多个背包中,但每个物品只能使用有限的次数。

问题描述

背包问题分类:

  • 0-1背包问题 Java数据结构与算法(0/1背包问题)-CSDN博客
  • 完全背包问题 Java数据结构与算法(完全背包)-CSDN博客
  • 多重背包问题
  • 混合背包问题
  • 二维背包问题
  • 分组背包问题
  • 有依赖的背包问题 (困难)

解题思路:

多重背包问题是一个 NP 完全问题,通常使用以下方法之一进行求解:

 动态规划(Dynamic Programming, DP):对于小规模问题,可以使用多维动态规划的方法解决,但对于大规模问题,计算量会非常大。

实现代码

import java.util.ArrayList;
import java.util.List;public class MultipleKnapsack {public static void main(String[] args) {int[] values = {60, 100, 120};int[] weights = {10, 20, 30};int[] quantities = {2, 1, 1};int[] capacities = {50, 50};int maxValue = multipleKnapsack(values, weights, quantities, capacities);System.out.println("Maximum value: " + maxValue);}public static int multipleKnapsack(int[] values, int[] weights, int[] quantities, int[] capacities) {int n = values.length;int m = capacities.length;// Transform each item into multiple items based on its quantityList<Integer> newValues = new ArrayList<>();List<Integer> newWeights = new ArrayList<>();for (int i = 0; i < n; i++) {for (int j = 0; j < quantities[i]; j++) {newValues.add(values[i]);newWeights.add(weights[i]);}}int[] dp = new int[sum(capacities) + 1];// Apply 0/1 Knapsack logic for each of the new itemsfor (int k = 0; k < newValues.size(); k++) {int value = newValues.get(k);int weight = newWeights.get(k);for (int c = sum(capacities); c >= weight; c--) {dp[c] = Math.max(dp[c], dp[c - weight] + value);}}// Find the maximum value fitting into the combined capacityint maxValue = 0;for (int cap : capacities) {maxValue = Math.max(maxValue, dp[cap]);}return maxValue;}private static int sum(int[] array) {int sum = 0;for (int num : array) {sum += num;}return sum;}
}

QA1:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Nvidia+AI摄像头】面向机器人双目视觉相机

随着人工智能和机器人技术的不断发展&#xff0c;双目深度相机作为一种重要的传感器&#xff0c;正在被广泛应用于各种机器人系统中。双目深度相机作为机器人不可或缺的感知器件&#xff0c;其高精度深度信息为机器人提供环境感知、立体视觉、姿态识别等功能&#xff0c;让机器…

Flink 窗口函数

一、Window 概述 Flink 流式计算是一种被设计用于处理无限数据集的数据处理引擎&#xff0c;而无限数据集是指一种不断增长的本质上无限的数据集&#xff0c;而 window 是一种切割无线数据为有限块进行处理的手段。 二、Window 分类 Window 可以分为两类&#xff1a; Count…

程序员画图工具?那必然是你了!!【送源码】

作为一个程序员&#xff0c;画图是必不可少的技巧。当然此画图不是搞艺术&#xff0c;而是画各种架构图、流程图、泳道图以及各种示意图。 平时我不论是记笔记、写技术文章&#xff0c;还是工作中写文档&#xff0c;都需要配上各种各样的示意图。不管是帮助自己更好的掌握知识…

云动态摘要 2024-06-17

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [低至1折]腾讯混元大模型产品特惠 腾讯云 2024-06-06 腾讯混元大模型产品特惠&#xff0c;新用户1折起&#xff01; 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用…

Thinkpad系列产品进入Bios并设置U盘启动

Thinkpad系列产品&#xff0c;进入Bios并设置U盘启动&#xff0c;常用于以下场景&#xff1a; 1. 安装操作系统。 通过U盘启动盘&#xff0c;用户可以在电脑无法从硬盘启动或需要重装系统时&#xff0c;将操作系统安装到电脑中。这种方法简单且有效&#xff0c;节省了时间并方便…

夏季家里粉尘螨虫满天飞?一招搞定!好用家用空气净化器品牌分享

每到夏季&#xff0c;是家中尘螨滋生的高发期。夏季无论是开窗通风还是关窗开空调&#xff0c;都很容易造成空气中的浮尘堆积&#xff0c;不注意卫生清洁&#xff0c;容易滋生细菌、尘螨。 易过敏、体质弱的人群长时间在空气污染环境中&#xff0c;很容易就会过敏或者发生其他…

成员变量和for循环里面的变量不冲突原因

今天写项目&#xff0c;发现一个类中有一个成员变量与for循环块中的局部变量重名了&#xff0c;但是也没有报错&#xff0c;功能也是正常的&#xff0c;然后了解了一下原因&#xff1a; 成员变量和 for 循环块中的变量不冲突的原因在于它们的作用域&#xff08;Scope&#xff…

2024年最新消防设施操作员(初级)题库

16.LQG10-30表示消防供水管用&#xff0c;设计工作压力为&#xff08; &#xff09;MPa&#xff0c;水带长度为&#xff08; &#xff09;m的轻便消防水龙。 A.10、30 B.10、3.0 C.1.0、30 D.1.0、3.0 答案:C 解析:根据初级教材179页&#xff0c;LQG10-30表示消防供水管用…

Hive笔记-2

第 3 章 DDL (Data Definition Language) 数据定义 DDL数据定义语言 DML数据操作语言 3.1 数据库 (database) 3.1.1 创建数据库 1) 语法 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_…

leetcode153. 寻找旋转排序数组中的最小值

leetcode153. 寻找旋转排序数组中的最小值 使用二分法。中间值如果小于等于最右边的值&#xff0c;去左边部分找&#xff1b;中间值如果大于最右边的值&#xff0c;去右半部分找。 def rotate_array_min(nums):n len(nums)low 0high n - 1while low < high:mid low (h…

Git 代码管理规范 !

分支命名 master 分支 master 为主分支&#xff0c;也是用于部署生产环境的分支&#xff0c;需要确保master分支稳定性。master 分支一般由 release 以及 hotfix 分支合并&#xff0c;任何时间都不能直接修改代码。 develop 分支 develop 为开发环境分支&#xff0c;始终保持最…

在微信公众号上怎么添加预定房间功能

在这个快节奏的现代社会&#xff0c;人们对于便捷与高效的需求日益增加。特别是在旅行或出差时&#xff0c;能够快速、方便地预订一间舒适的房间&#xff0c;无疑是每个人心中的小确幸。今天&#xff0c;我们为您带来了一项革命性的服务——微信公众号上的房间预定功能&#xf…

力扣 50.pow(x,n)

class Solution { public: double quickMul(double x,long long N){ if(N0) return 1; double valuequickMul(x,N/2); return N%20?value*value:value*value*x; } double myPow(double x, int n) { long long Nn; return N>0?quickMul(x, N):1.0/quickMul(x, N); } };

Serverless如何赋能餐饮行业数字化?乐凯撒思变之道

导语 | 在数字化浪潮席卷全球的今天&#xff0c;每一个行业都在经历着前所未有的变革。餐饮行业作为人们日常生活中不可或缺的一部分&#xff0c;更是面临着巨大的转型压力。如何完成数字化转型&#xff0c;打破传统经营模式的限制&#xff0c;成为摆在众多餐饮商家面前的一道难…

[二分枚举]特殊密码锁

描述 有一种特殊的二进制密码锁&#xff0c;由n个相连的按钮组成&#xff08;n<30&#xff09;&#xff0c;按钮有凹/凸两种状态&#xff0c;用手按按钮会改变其状态。 然而让人头疼的是&#xff0c;当你按一个按钮时&#xff0c;跟它相邻的两个按钮状态也会反转。当然&am…

Windows 10永久关闭“系统准备工具 3.14“禁止开机自启

文章目录 一、问题描述二、解决方法总结 一、问题描述 每次开机都会显示如下图所示的 系统准备工具 3.14 二、解决方法 按win R键打开运行窗口 → 输入cmd → 点击 确定 如图所示输入下面如图所示代码 → 按 回车 → 输入 Y → 按 回车 XCOPY C:\windows\System32\svchost.e…

Apache ShardingSphere实战与核心源码剖析

Apache ShardingSphere实战与核心源码剖析 1.数据库架构演变与分库分表介绍 1.1 海量数据存储问题及解决方案 如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。…

外观缺陷检测原理

产品外观是影响产品质量最重要的因素之一&#xff0c;其平整度、有无瑕疵等不仅影响到产品美观&#xff0c;甚至能够直接影响产品本身的使用和后续加工&#xff0c;给企业带来重大经济损失。 随着人工智能技术的快速发展&#xff0c;机器视觉与AI技术的结合应用加速渗透进工业…

CSS外部样式

CSS的外部样式表是网页设计中一个非常强大的工具&#xff0c;它允许我们集中管理多个页面的样式&#xff0c;从而提高开发效率和维护性。本文将介绍如何使用CSS外部样式表&#xff0c;以及如何进行优化命名&#xff0c;以保持代码的清晰和可维护性。 什么是CSS外部样式&#x…

AutoMQ 社区双周精选第十一期(2024.05.27~2024.06.12)

本期概要 欢迎来到 AutoMQ 第十一期双周精选&#xff01;在过去两周里&#xff0c;主干动态方面&#xff0c;AutoMQ 跟进了 Apache Kafka 3.4.x BUG 修复&#xff0c;并进行了CPU & GC 性能优化。另外&#xff0c;AutoBalancing 的 Reporter 和 Retriever 也开始支持指定 …