当前位置: 首页 > article >正文

【无标题】《背包塞不下?贪心算法教你“碎尸万段”也能价值最大(附C代码)》

今天分享一下连续背包问题的贪心算法题目连续背包问题是这样定义的给定一个总承重量为 W 的背包和 n 件物品的集合 S{s1​,⋯,sn​}其中第 i 件物品有其重量 wi​ 和价值 vi​。如果将第 i 件物品 si​ 的 xi​ 部分xi​∈[0,1]放入背包则放入的重量为 xi​⋅wi​放入的价值为 xi​⋅vi​。要求一种分派方案 x(x1​,⋯,xn​)在满足约束条件 R: Σi1n​xi​⋅wi​≤W即装入的物品总重量不超过背包承重的前提下使优化函数 f(x)Σi1n​xi​⋅vi​ 取极大值即装入的物品总价值最大。本题就请你实现解决这个问题的贪心算法。输入格式输入首先在第一行中给出正整数 n≤1000和正实数 W≤500。随后两行各给出 n 个不超过 2000 的正实数分别为 n 件物品的重量和价值即第一行第 i 个数字表示第 i 件物品的重量第二行对应位置表示其价值。同行数字间以空格分隔。输出格式首先在第一行输出装入物品的最大总价值随后一行输出最优分派方案的分量 (x1​,⋯,xn​)。要求输出小数点后 2 位。简单起见每个分量后面跟一个空格。输入样例5 11.01 2 5 6 71 6 18 22 28输出样例42.670.00 0.00 0.00 0.67 1.00#include stdio.hint main(){int n;//根据题目首先定义一个int类型的n(题目中n 1000所以int就够用了)scanf(%d,n);//读取ndouble w;/*题目上说w是正实数所以用float或者double一般来说float就行我怕数据太大所以就用的double,我个人感觉对于实数除了题目要求之外最好都用 double*/scanf(%lf,w);//读取wdouble a1[n],a2[n];//按题目要求弄2个实数数组double A[n];/*这个数组我是用来存每个物品每一单位的价值因为题目要求要最大价值所以肯定是优先把一单位价值最高的存进去*/for(int i 0;i n;i){scanf(%lf,a1[i]);//读取物体体积}for(int i 0;i n;i){scanf(%lf,a2[i]);//读取物体重量}for(int i 0;i n;i){A[i] a2[i] / a1[i];//计算每个物体每单位的价值}double cnt 0,result 0;/*cnt是在把物品装进背包时记录背包装了多少result是当前装入背包物品的总价值*/int index 0;//现在解释不太好理解index我在下面在解释double s[n];//根据题目要求我们需要记录装入背包物品的对自己本身的权重for(int i 0;i n;i){s[i] 0;//初始化}while(cnt w){//只要背包没装满就接着装double max 0;/*弄一个max上面不是说过要找每个单位价值最大的吗max就是用来存储物品中价值最大的*/for(int i 0;i n;i){/*因为我们不知道物品中单位价值最大的是哪个所以需要弄个循环找一下也可以排序因为我感觉c语言中排序又麻烦又费时所以就直接弄个循环找最大值了*/if(max A[i]){max A[i];//找到比max大的就赋值给maxindex i;//记录一下当前数组里单位价值最大的物品的下标}}A[index] 0;/*因为我们等会给这个物品装入背包后放入下一个物品时如果不给之前最大的哪个改小一点那最大值max就一直会是这个物品可是这个物品我们已经装入背包了已经没有了所以要给他的单位价值改为0*/if(max 0){/*如果我们找最大值max找了一圈max还是等于0就证明物品全放进背包了这种情况就是背包的容量大于或等于所有物品的体积就是说背包可以把所有的物品都装进去*/break;//所以cnt会一直满足循环条件所以要加个break跳出循环}/*我们找到单位价值最大的物品后把他放入背包有2种情况一个是可以全部放进去一个是只能放进去一部分*/if(a1[index] w - cnt){//这个就是可以全部放进去的s[index] 1.0;//能全部放进去所以找个物品对于自己的权重为1cnt a1[index];//把这个物品放进去把背包现在装了多少东西更新一下result a2[index];//当前背包物品的价值也更新一下}else{result ((w - cnt) / a1[index]) * a2[index];/*这个就是只能放进去一部分放进去那部分的价值加上背包之前的价值*/s[index] (w - cnt) / a1[index];//放进去那部分物品对于本身的权重cnt w;//背包都不能把物品整个进去了不就证明背包满了所以我们把背包容量赋值给cnt}}printf(%.2f\n,result);//输出背包总价值for(int i 0;i n;i){printf(%.2f ,s[i]);//输出每一个物品装进背包的权重}return 0;}下面是不要注释的#include stdio.hint main(){int n;scanf(%d,n);double w;scanf(%lf,w);double a1[n],a2[n];double A[n];for(int i 0;i n;i){scanf(%lf,a1[i]);}for(int i 0;i n;i){scanf(%lf,a2[i]);}for(int i 0;i n;i){A[i] a2[i] / a1[i];}double cnt 0,result 0;int index 0;double s[n];for(int i 0;i n;i){s[i] 0;}while(cnt w){double max 0;for(int i 0;i n;i){if(max A[i]){max A[i];index i;}}A[index] 0;if(max 0){break;}if(a1[index] w - cnt){s[index] 1.0;cnt a1[index];result a2[index];}else{result ((w - cnt) / a1[index]) * a2[index];s[index] (w - cnt) / a1[index];cnt w;}}printf(%.2f\n,result);for(int i 0;i n;i){printf(%.2f ,s[i]);}return 0;}

相关文章:

【无标题】《背包塞不下?贪心算法教你“碎尸万段”也能价值最大(附C代码)》

今天分享一下连续背包问题的贪心算法题目:连续背包问题是这样定义的:给定一个总承重量为 W 的背包和 n 件物品的集合 S{s1​,⋯,sn​},其中第 i 件物品有其重量 wi​ 和价值 vi​。如果将第 i 件物品 si​ 的 xi​ 部分(xi​∈[0,…...

物流转行网络安全自学经验,零基础自学网络安全,血泪泪的干货分享

前言 当每台设备都成为攻击入口,每个漏洞都可能摧毁商业帝国。这不是危言耸听——Akamai 2024报告显示:全球企业因网络攻击每小时损失114万美元。但危机中藏着机遇:即便零基础转行者,掌握安全技术也能成为数字世界的“免疫细胞”…...

Semtech SX9324 SAR传感器在笔记本电脑中的应用:如何优化WWAN性能与合规性

Semtech SX9324 SAR传感器在笔记本电脑中的智能功率调控实践 当你在咖啡厅用笔记本视频会议时,是否注意过机身侧面的金属触点?这些不起眼的小元件背后,藏着确保无线性能与安全合规的精密控制系统。作为射频工程师,我们近年来在高端…...

关闭谷歌浏览器(Google Chrome)自动更新方法

禁用谷歌浏览器更新服务去除更新窗口提示辅助设置禁止更新操作 删除计划任务设置Update文件夹权限控制 关闭谷歌浏览器(Google Chrome)自动更新方法,本人实测,步骤清晰: PS:如果你想下载历史版本,可以看这里&#x…...

RACI 矩阵是什么

RACI 是企业项目管理、流程权责划分的经典责任分配矩阵,用来清晰定义一项工作 / 任务中,每个人 / 部门具体扮演什么角色,杜绝权责不清、推诿扯皮、重复干活、没人兜底的问题。一、四个字母核心定义表格字母英文全称中文名称核心职责RResponsi…...

linux进程是否在容器里

判断一个 Linux 进程是否运行在容器&#xff08;Docker、K8s、containerd 等&#xff09;里&#xff0c;最可靠的是看 cgroup 路径、PID 命名空间、根目录 / 挂载信息。检查 cgroup 容器进程的 /proc/<pid>/cgroup 会包含容器运行时标识&#xff1a;Docker&#xff1a;/d…...

海洋边缘计算:Switch与Forwarder底层网络架构实战

摘要&#xff1a;在复杂的海洋工业环境中&#xff0c;边缘通信节点的架构直接影响系统的隔离能力。本文从嵌入式Linux底层出发&#xff0c;剥析通用海事网关的处理逻辑&#xff0c;演示利用代码构建防御管道。 导语&#xff1a;随着船舶工业向IT与OT深度融合演进&#xff0c;为…...

IP地址到底是什么?一张图看懂+命令行/网站查询实操

在调试网络、配置服务器或排查登录风控时&#xff0c;几乎每天都要面对IP地址。但如果你问身边的人“IP到底是什么”&#xff0c;可能很多人都会一愣——能说出全称“互联网协议地址”的人不少&#xff0c;但真正理解它是什么、怎么用、如何快速查到自己的IP&#xff0c;还真不…...

从零到一:用ima构建你的专属知识大脑【手把手教学】

1. 为什么你需要一个"第二大脑"&#xff1f; 每天早上打开电脑&#xff0c;你是不是也和我一样&#xff0c;面对满桌面的文档、收藏夹里几百个未读网页、微信里收藏的无数文章感到无从下手&#xff1f;我们的大脑就像一台内存有限的电脑&#xff0c;每天接收海量信息…...

解决NextCloud无法挂载SMB/CIFS共享的smbclient安装指南

1. 为什么NextCloud需要smbclient&#xff1f; 很多朋友在搭建NextCloud私有云时&#xff0c;都会遇到一个头疼的问题&#xff1a;明明服务器配置没问题&#xff0c;但就是无法挂载SMB/CIFS共享存储。这个问题90%的情况都是因为缺少smbclient组件。我去年给客户部署NextCloud时…...

如何精准控制固定定位头部容器中各元素的布局位置

本文详解如何在 position: fixed 的头部容器中统一管理子元素定位&#xff0c;解决因 top/left 百分比值导致的错位问题&#xff0c;通过重置定位基准、合理使用 flex 布局与相对/绝对定位组合&#xff0c;实现像素级可控的悬浮下拉菜单及整体 ui 对齐。 本文详解如何在 p…...

C#怎么实现后台作业调度 C#如何用Quartz.NET配置Cron表达式执行定时调度作业【框架】

Quartz.NET CronTrigger未按时触发的根本原因是时区配置错误和调度器启动时机不当&#xff1b;需显式指定时区、确保Start()在添加所有job/trigger后调用、使用ISchedulerFactory获取调度器、job类须有public无参构造函数且非static或嵌套类。Quartz.NET 的 CronTrigger 为什么…...

【Proteus】:从零开始搭建你的第一个电路仿真项目

1. 认识Proteus&#xff1a;电子工程师的虚拟实验室 第一次打开Proteus时&#xff0c;我就被这个蓝色界面的软件震撼到了——它就像把整个电子实验室搬进了电脑。Proteus不仅仅是一个电路仿真工具&#xff0c;更是电子设计自动化&#xff08;EDA&#xff09;领域的瑞士军刀。从…...

保姆级避坑指南:在Windows上用React Native 0.72.5开发鸿蒙应用(API 13+)

Windows平台React Native鸿蒙应用开发全流程避坑指南 1. 环境配置&#xff1a;从零开始的正确姿势 在Windows系统上搭建React Native鸿蒙开发环境&#xff0c;就像组装一台精密仪器——每个零件都必须严丝合缝。我曾在三个不同配置的Windows 11设备上反复测试&#xff0c;最终…...

SAM 3镜像免配置部署:支持ARM64架构,Jetson Orin Nano边缘设备实测

SAM 3镜像免配置部署&#xff1a;支持ARM64架构&#xff0c;Jetson Orin Nano边缘设备实测 1. 开篇&#xff1a;边缘AI的新选择 如果你正在寻找一个能在边缘设备上运行的图像分割模型&#xff0c;SAM 3绝对值得关注。这个由Facebook推出的统一基础模型&#xff0c;不仅支持图…...

如何通过M9A智能助手自动化管理《重返未来:1999》日常任务

如何通过M9A智能助手自动化管理《重返未来&#xff1a;1999》日常任务 【免费下载链接】M9A 重返未来&#xff1a;1999 小助手 | Assistant For Reverse: 1999 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 还在为《重返未来&#xff1a;1999》中重复的每日任务而烦…...

5步自动化方案:如何高效获取asmr.one平台的音频资源

5步自动化方案&#xff1a;如何高效获取asmr.one平台的音频资源 【免费下载链接】asmr-downloader A tool for download asmr media from asmr.one(Thanks for the asmr.one) 项目地址: https://gitcode.com/gh_mirrors/as/asmr-downloader 你是否曾花费数小时在不同网站…...

QTTabBar多语言配置完整指南:快速实现Windows文件管理器本地化

QTTabBar多语言配置完整指南&#xff1a;快速实现Windows文件管理器本地化 【免费下载链接】qttabbar QTTabBar is a small tool that allows you to use tab multi label function in Windows Explorer. https://www.yuque.com/indiff/qttabbar 项目地址: https://gitcode.c…...

如何用自定义事件监听视频播放器的自定义缓冲状态变化

可通过派发buffering-start/end等自定义事件响应缓冲状态变化&#xff0c;需结合video.buffered、readyState、progress/waiting/playing事件准确判断状态&#xff0c;用CustomEvent传递上下文&#xff0c;并规范监听与解绑。可以通过在视频播放器实例上派发自定义事件&#xf…...

Xournal++:为什么这款开源笔记软件能解决您的学术记录难题

Xournal&#xff1a;为什么这款开源笔记软件能解决您的学术记录难题 【免费下载链接】xournalpp Xournal is a handwriting notetaking software with PDF annotation support. Written in C with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Window…...

SimpleFOC源码学习08(v2.3.2) - 霍尔编码器HallSensor.cpp与HallSensor.h,背后的状态机—6个扇区是怎么驱动 FOC 的?

导言github 源码&#xff1a; https://github.com/simplefoc/Arduino-FOC/blob/v2.3.2/src/sensors/HallSensor.hhttps://github.com/simplefoc/Arduino-FOC/blob/v2.3.2/src/sensors/HallSensor.cpp 在第 8 篇分析了增量式编码器 Encoder 之后&#xff0c;这篇来看另一类在 BL…...

保姆级教程:手把手教你用Node.js + WebSocket搭建自己的WebRTC信令服务器

从零构建WebRTC信令服务器&#xff1a;Node.js实战指南 WebRTC技术已经彻底改变了实时通信的格局&#xff0c;让浏览器之间的点对点音视频传输成为可能。但很多开发者在掌握了getUserMedia和RTCPeerConnection的基本用法后&#xff0c;往往会卡在一个关键环节——如何让两个浏览…...

SimpleFOC源码学习07(v2.3.2) - 增量式编码器Encoder.cpp与Encoder.h,从一对 A、B 信号,到速度、方向、绝对位置的完整解法

导言github 源码&#xff1a; https://github.com/simplefoc/Arduino-FOC/blob/v2.3.2/src/sensors/Encoder.hhttps://github.com/simplefoc/Arduino-FOC/blob/v2.3.2/src/sensors/Encoder.cpp 你有没有在调 FOC 时遇到电机转向和预期相反&#xff0c;或者速度读数在低速时抖个…...

DB2权限管理与操作指南,网友推荐:实用性强,适合数据库管理员参考

DB2权限管理核心命令&#xff1a;GRANT语句用于授权&#xff0c;REVOKE用于收回权限。基本语法&#xff1a;GRANT authority ON object TO user。实例管理员常用db2inst1用户登录&#xff0c;执行db2 connect to sample&#xff0c;然后GRANT DATAACCESS ON DATABASE TO PUBLIC…...

5步掌握AssetStudio:Unity游戏资源提取完整实战手册

5步掌握AssetStudio&#xff1a;Unity游戏资源提取完整实战手册 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and additional im…...

Agent 系列之 ReWOO:从蓝图规划到高效求解的架构革新

1. ReWOO框架的革新性设计 第一次听说ReWOO这个框架时&#xff0c;我正被一个复杂的NLP项目折磨得焦头烂额。当时使用的ReAct框架在处理多步骤推理任务时&#xff0c;不仅响应速度慢&#xff0c;Token消耗更是高得惊人。直到尝试了ReWOO&#xff0c;才发现原来大模型推理还能这…...

MATLAB强化学习模型打包exe实战:如何让没有MATLAB的电脑也能运行你的RL算法

MATLAB强化学习模型打包exe实战&#xff1a;跨平台部署全流程解析 当你的强化学习算法在MATLAB中调试完美后&#xff0c;如何让没有安装MATLAB的客户或边缘设备也能运行&#xff1f;这就像把一道精心烹制的大餐打包成便携餐盒——既要保留原汁原味&#xff0c;又要适应不同&quo…...

自动驾驶中的多智能体协作

自动驾驶中的多智能体协作&#xff1a;从理论到规模化落地的全栈技术解析 关键词 自动驾驶、多智能体协作、MARL、车路云一体化、V2X、博弈论、感知融合 摘要 本文从第一性原理出发&#xff0c;将“自动驾驶多智能体协作&#xff08;AV-MAC&#xff1a;Autonomous Vehicle Mult…...

鸿蒙ArkTs实战:从零构建so胶水层,打通C/C++原生能力与JS/TS应用生态

1. 理解so胶水层在鸿蒙ArkTs中的核心价值 在鸿蒙应用开发中&#xff0c;我们经常会遇到需要调用C/C原生能力的场景。比如你可能有一个用C语言编写的高性能图像处理库&#xff0c;或者一个经过多年优化的数据解析模块。这时候就需要一个"翻译官"——也就是我们说的so胶…...

Python实战:5分钟搞定PANN声音检测模型部署(附完整代码)

Python极速部署指南&#xff1a;5分钟玩转PANN声音检测模型 当你在深夜加班时&#xff0c;突然听到窗外传来奇怪的声响&#xff1b;当你在整理家庭录像时&#xff0c;需要快速标记出所有包含婴儿笑声的片段&#xff1b;当你开发智能家居系统时&#xff0c;希望设备能自动识别门…...