【算法-贪心】分数背包问题

news2024/11/25 6:33:12

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

分数背包问题(Fractional Knapsack Problem)是一个经典的组合优化问题,通常用于描述在有限容量的背包中如何选择物品以最大化总价值的问题。与 0/1 背包问题不同,分数背包问题允许部分选择物品,即可以选择物品的一部分,而不一定要全部选择或全部不选择。

问题描述:
给定一组物品,每个物品有一个重量(weight)和一个价值(value),以及一个背包的最大容量(capacity)。目标是选择一些物品,使得它们的总重量不超过背包的容量,同时总价值最大化。可以选择部分物品,即可以将物品分成若干份,并选择其中一部分放入背包。

分数背包问题可以用贪心算法来解决。具体步骤如下:

  1. 计算每个物品的价值密度,即每个物品的单位价值(value/weight)。

  2. 按照单位价值从高到低对物品进行排序。

  3. 初始化背包的总重量和总价值都为 0。

  4. 依次考虑排序后的物品,选择单位价值最高的物品,将其放入背包直到背包装满为止,或者直到没有更多的物品可供选择。

  5. 如果物品无法完整放入背包,可以选择将其部分放入背包以填满背包容量。

  6. 计算所选择物品的总价值,这就是问题的最优解。

分数背包问题的贪心算法具有良好的时间复杂度,通常可以在 O(nlogn)时间内解决,其中 n 是物品的数量。

/*

1. n 个物品都是液体,有重量和价值

2. 现在你要取走 10 升 的液体

3. 每次可以不拿,全拿,或拿一部分,问最高价值是多少

编号 重量(升) 价值

0 4 24 水

1 8 160 牛奶 选中 7/8

2 2 4000 五粮液 选中

3 6 108 可乐

4 1 4000 茅台 选中

8140

简化起见,给出的数据都是【价值/重量】能够整除,避免计算结果中出现小数,增加心算难度

*/

public class FractionalKnapsackProblem {
    static class Item {
        int index;
        int weight;
        int value;

        public Item(int index, int weight, int value) {
            this.index = index;
            this.weight = weight;
            this.value = value;
        }

        int unitPrice() {
            return value / weight;
        }

        @Override
        public String toString() {
            return "Item(" + index + ")";
        }
    }

    public static void main(String[] args) {
        Item[] items = new Item[]{
                new Item(0, 4, 24),
                new Item(1, 8, 160),
                new Item(2, 2, 4000),
                new Item(3, 6, 108),
                new Item(4, 1, 4000),
        };
        select(items, 10);
    }

    static void select(Item[] items, int total) {
        Arrays.sort(items, Comparator.comparingInt(Item::unitValue).reversed());
        int max = 0; // 最大价值
        for (int i = 0; i < items.length; i++) {
            Item item = items[i];
            if (total >= item.weight) {//可以拿完
                max += item.value;
                total -= item.weight;
            } else {//不能拿完
                max += total * item.unitValue();
                break;
            }
        }
        System.out.println("最大价值是:" + max);
    }
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

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

相关文章

Redis 图形化界面下载及使用超详细教程(带安装包)! redis windows下客户端下载

redis图形化界面的压缩包&#xff0c;直接解压缩即可&#xff0c;双击 rdm.exe 即可运行 打开后是这样子&#xff1a; 我已经连接过本地的redis数据库&#xff0c;所以左边有个localhost&#xff0c;你的可能是空白的&#xff0c;正常&#xff01; 1、连接本地Redis服务器 这…

uniapp-vue3-标签选择器wo-tag

采用uniapp-vue3实现, 是一款支持高度自定义的标签选择器组件&#xff0c;支持H5、微信小程序&#xff08;其他小程序未测试过&#xff0c;可自行尝试&#xff09; 可到插件市场下载尝试&#xff1a; https://ext.dcloud.net.cn/plugin?id14960 使用示例 <template>&…

设计模式03———包装器模式 c#

首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 创建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色 &#xff08;个人喜好&#xff09;调节渐变色 可更改同种颜色的色调 &#xff08;个人喜好&#xff09; 调节天空盒 准备工作做完后 接下我们做【…

晨控CK-GW06系列网关与汇川可编程控制器MOSBUSTCP通讯手册

晨控CK-GW06系列网关与汇川可编程控制器MOSBUSTCP通讯手册 晨控CK-GW06系列是支持标准工业通讯协议 MODBUSTCP 的网关控制器,方便用户集成到PLC等控制系统中。本控制器提供了网络 POE 供电和直流电源供电两种方式&#xff0c;确保用户在使用无 POE 供电功能的交换机时可采用外…

统信UOS1060设置自动关机02

原文链接&#xff1a;统信UOS1060设置自动关机02 hello&#xff0c;大家好啊&#xff0c;今天继续给大家介绍一篇如何在统信UOS 1060上实现自动关机的文章&#xff0c;本篇文章采用创建系统服务&#xff08;Systemd&#xff09;的方式。 你可以创建一个systemd服务来在特定时间…

Golang 接口(interface)最佳实践

引用类型&#xff1a;指针、slice切片、map、管道chan、interface等都是引用类型&#xff0c;在作为函数参数的时候进行修改会影响到原有的数据。 实现对Hero结构体切片的排序&#xff1a;sort.Sort&#xff08;data Interface&#xff09; Interface里面有三个方法可以实现&a…

sts搭建springboot

sts搭建springboot 需要的软件 Apache-maven-3.3.9.rar 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1xgj Spring-tool-suite-4-4.20.0.RELEASE-e4.29.0-win32.win32.x86_64.self-extracting.jar 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;p…

【数据结构】算法、时间复杂度和空间复杂度详解 ------ 算法篇

文章目录 &#x1f4cb;前言一. ⛳️算法的定义二. ⛳️算法的特性2.1 输入输出2.2 输入输出2.3 有穷性2.4 确定性2.5 可行性 三. ⛳️算法设计要求3.1 正确性3.2 可读性3.2 健壮性3.3 时间效率高和存储量低 四. ⛳️算法效率的度量方法4.1 事后统计方法4.2 事前分析估算方法 五…

基于SSM的旅游信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

竞赛选题 深度学习LSTM新冠数据预测

文章目录 0 前言1 课题简介2 预测算法2.1 Logistic回归模型2.2 基于动力学SEIR模型改进的SEITR模型2.3 LSTM神经网络模型 3 预测效果3.1 Logistic回归模型3.2 SEITR模型3.3 LSTM神经网络模型 4 结论5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 …

上位机在自动化中有何作用和优势?

今日话题 上位机在自动化中有何作用和优势&#xff1f; 自动化控制编程领域包括单片机、PLC、机器视觉和运动控制等方向。输入“777”&#xff0c;即刻获取关于上位机开发和数据可视化的专业学习资料&#xff0c;近年来&#xff0c;上位机编程逐渐兴起&#xff0c;正在逐步替…

统信UOS 1060系统自定义恢复

原文链接&#xff1a;统信UOS 1060系统自定义恢复 hello&#xff0c;大家好啊&#xff0c;今天给大家带来关于统信UOS 1060系统备份还原的系列内容的第五篇文章&#xff0c;系统自定义恢复&#xff0c;前期我们对系统进行了多种方式的备份&#xff0c;接下里就开始进行恢复操作…

免费获取天气预报的API接口(Json格式)

免费获取天气预报的API接口&#xff08;Json格式&#xff09; 1、接口地址2、城市代码 1、接口地址 当需要获取某个城市天气数据json时候&#xff0c;需要传入一个城市代码编码作为入参&#xff0c;地址&#xff1a; http://t.weather.itboy.net/api/weather/city/xxxxx &…

【Redis】Zset 有序集合命令

目录 命令ZADDZCARDZRANGEZCOUNTZREVRANGEZRANGEBYSCOREZPOPMAXBZPOPMAXZPOPMINBZPOPMINZRANKZREVRANKZSCOREZREMZREMRANGEBYRANKZREMRANGEBYSCOREZINCRBY 命令 ZADD 添加或者更新指定的元素以及关联的分数到zset中&#xff0c;分数应该符合double类型&#xff0c;inf/-inf作为…

尚硅谷Flink(二)DStream API

目录 &#x1f320;不会点 &#x1fa90;DataStream API ​编辑 &#x1f320; 执行环境 创建执行环境 执行模式 触发程序执行 &#x1f320;源算子 准备基础类型 从集合中读取数据 从文件读取数据 从 Socket 读取数据 从 Kafka 读取数据 &#xff08;没学过&#xff09; …

分享一下便利店怎么做微信小程序

便利店微信小程序开发&#xff0c;让生意更便捷&#xff01; 在这个数字化时代&#xff0c;微信小程序已经成为一种新的生活方式。它不仅改变了人们的消费习惯&#xff0c;还为各行各业提供了无限商机。对于便利店来说&#xff0c;微信小程序是一个绝佳的营销工具&#xff0c;…

docker-machine常用

docker-machine常用 什么是Docker Machine&#xff1f;Docker Machine默认支持的驱动安装kvm驱动 安装和配置Docker Machine环境准备node1安装Dockernode1安装Docker Machine为Docker Machine安装自动补全为Docker Machine准备boot2docker.iso镜像为node2创建machine主机 管理远…

138589-19-2,羧基荧光素-氨基盐酸盐,FAM-NH2.HCl

CAS号&#xff1a;138589-19-2 中文名&#xff1a;羧基荧光素-氨基.盐酸盐 英文名&#xff1a;FAM-NH2.HCl 化学式&#xff1a;C27H26N2O6 分子量&#xff1a;474.51 纯度标准&#xff1a;95% 产品简介&#xff1a;5-FAM-NH2.HCl(羧基荧光素-氨基.盐酸盐)其中异硫氰酸荧光…

点成分享 | 水浴设备在食品生物活性测定中的应用

一、食品加工副产品和废物的再利用 近年来&#xff0c;人们越来越关注食品加工副产物和废物的再利用问题。从环保角度来看&#xff0c;食品加工副产物和废物处理不当会对环境造成严重污染&#xff0c;因为他们降解后会产生难闻气味和大量渗滤液&#xff0c;从而垃圾填埋场也会…

嵌入式 CVR 和 Linux CVR:智能摄像机视频录制器的未来

随着智能监控、智能家居等领域的不断发展&#xff0c;嵌入式 CVR&#xff08;Camera Video Recorder&#xff09;和基于 RV1106/RV1103 芯片的 Linux CVR&#xff08;Camera Video Recorder&#xff09;平台成为了智能摄像机视频录制器的主要解决方案。本文将介绍嵌入式 CVR 的…