贪心刷题1-部分背包

题目来源:【深基12.例1】部分背包问题 - 洛谷

参考书目:《深入浅出程序设计竞赛(基础篇)》

解题思路:这道题是部分背包,如果金币不能完整的放入是可以分割的。题目中有若干堆金币,每堆金币有一定的重量(m)和价值(v),以及一个最大承重为 t 的背包。目标是通过完全或部分地拿取这些金币堆,使得背包中的金币价值最大化。代码采用贪心算法,通过按价值与重量比降序排序金币堆,然后迭代地将它们添加到背包中,直到背包装满或没有更多的金币堆可考虑。

解题步骤:

  • 迭代读取每堆金币的重量和价值,并存储在数组 a 中。
  • 使用 sort 函数和 cmp 比较函数对金币堆进行排序。
  • 迭代地将每堆金币加入背包:
    • 如果当前金币堆的重量大于剩余容量,则跳出循环。
    • 否则,从剩余容量中减去金币堆的重量,并将其价值加到总价值 ans 上。
  • 如果因为一堆金币无法完全加入而退出循环,将该金币堆的一部分加入到 ans 中,以填满剩余容量。
  • 最后,打印出总价值 ans,保留两位小数。
#include<iostream>
#include<algorithm>using namespace std;// 定义结构体来存储每堆金币的重量和价值
struct coin {int m, v; // 金币堆的重量和价值
} a[110];// 比较函数,用于根据价值与重量的比率(性价比)进行排序
bool cmp(coin x, coin y)
{return x.v * y.m > y.v * x.m; // 比较两堆金币的性价比
}int main()
{int n, t, c, i;float ans = 0; // 初始化答案变量cin >> n >> t; // 读入金币堆数和背包容量c = t; // 背包剩余容量初始化为背包总容量// 读入每堆金币的重量和价值for (i = 0; i < n; i++){cin >> a[i].m >> a[i].v;}// 对金币堆按性价比降序排序sort(a, a + n, cmp);// 遍历金币堆,尝试将它们加入背包for (i = 0; i < n; i++){if (a[i].m > c) break; // 如果当前金币堆无法完全装入背包,则跳出循环c -= a[i].m; // 减少背包剩余容量ans += a[i].v; // 增加背包中金币的总价值}// 如果退出循环是因为一堆金币无法完全加入,则加入这堆金币的一部分if (i < n){ans += 1.0 * c / a[i].m * a[i].v; // 加入部分金币堆,按比例计算价值}// 输出最终答案,保留两位小数printf("%.2lf", ans);return 0;
}

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

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

相关文章

mac电脑使用pyinstaller打包python脚本

pyinstaller -F template.py 出现报错"AssertionError: Executable contains code signature!" 移除签名 codesign --remove-signature /Users/f7692281/PycharmProjects/TPtestlist/transmit_v6.0.py 打包命令 pyinstaller --windowed transmit_v6.0.py pyinst…

【js】事件循环之promise的async/await与setTimeout

什么是事件循环 事件循环又叫消息循环&#xff0c;是浏览器渲染主线程的工作方式。 浏览器开启一个永不停止的for循环&#xff0c;每次循环都会从消息队列中取任务&#xff0c;其他线程只需要在合适的时候将任务加入到消息队列的末尾。 过去分为宏任务和微任务&#xff0c;现…

wordpress模板官网

移民wordpress主题 移民代办wordpress主题&#xff0c;适合做海外移民咨询的代理公司搭建wordpress企业官方网站使用。 https://www.jianzhanpress.com/?p5130 夏令营wordpress主题 绿色夏令营wordpress主题&#xff0c;适合做夏令营或户外拓展的公司搭建wordpress官方网站…

D2587A高压大电流DC-DC——专为反激式、升压和正向转换器应用而设计的单片集成电路

1、概述 D2587A稳压器是专为反激式、升压和正向转换器应用而设计的单片集成电路。该器件提供四种不同的输出电压版本&#xff1a;3.3V、5V、12V 和可调节电压。这些稳压器需要的外部元器件很少&#xff0c;因此具有成本效益&#xff0c;并且易于使用。该电源开关是一款5A NPN器…

面试经典150题——最小栈

​Life is a journey, theres no right or wrong. 1. 题目描述 2. 题目分析与解析 2.1 思路一 看到题目的一瞬间&#xff0c;有没有注意到 常数时间内检索到最小元素的栈&#xff0c;那说明我们肯定需要把最小元素的下标存储起来&#xff0c;这样才能在常数时间内找到。 其…

网工学习 DHCP配置-接口模式

网工学习 DHCP配置-接口模式 学习DHCP总是看到&#xff0c;接口模式、全局模式、中继模式。理解起来也不困难&#xff0c;但是自己动手操作起来全是问号。跟着老师视频配置啥问题没有&#xff0c;自己组建网络环境配置就是不通&#xff0c;悲催。今天总结一下我学习接口模式的…

c++动态获取工作路径

最近在写项目时遇到一个问题 pclrobot:~/cProject/projects/myPro/mpRPC$ ls autobuild.sh bin build CMakeLists.txt conf example lib log README.md src test如上所示&#xff0c;我的项目根目录里有一个log文件夹和一个bin文件夹&#xff0c;我的需求是 bin目录…

揭秘8.4k星开发者的秘密武器:it-tools在线工具集,你不可不知!

在IT的世界里&#xff0c;为了更好地发挥自己的才能&#xff0c;必须善用优秀的工具。深入挖掘IT-Tools的神奇力量&#xff0c;让你的工作像魔法一般变得轻松高效&#xff01;无论是自动化、监控还是问题解决&#xff0c;这些工具是我们事业成功的关键利器。选择合适的IT工具&a…

PlantUML - 时序图

时序图主要内容 下面是一个简单的时序图&#xff0c;我们可以很容易并且美观的表达我们的交互流程&#xff0c;只需要在箭头的两边指定一个名字&#xff0c;加上描述即可&#xff1a; startuml bkloanapply -> bkloanapprove : request bkloanapprove --> bkloanapply :…

C++ map用法

int main() {void *p;str *st;st (str*)malloc(sizeof(str));st->a 23;st->b 24;p st;//使用void指针需强制类型转换printf("%d\n%d\n",((str*)p)->a, ((str*)p)->b);free(st);map<char, int> mpci;mpci[m] 20;mpci.insert(pair<char, int…

#WEB前端(盒子模型)

1.实验&#xff1a;盒子 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; margin&#xff08;外边距&#xff09; border&#xff08;边框&#xff09; padding&#xff08;内边距&#xff09; 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> &…

【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 再谈构造函数 初始化列表 隐式类型转换 explicit关键字 static成员 概念 计算程序中创建出了多少个类…

开源软件的商业模式探析:开放与盈利的平衡

写在开头 开源软件的概念和应用已经成为了现代科技领域中的一个重要组成部分。然而&#xff0c;虽然开源软件的价值和影响力得到了广泛认可&#xff0c;但如何在开放的环境中找到商业盈利的平衡却是一个颇具挑战性的问题。本文将深入探讨开源软件的商业模式&#xff0c;从基本…

力扣61:旋转链表

题目 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2输出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4输出&#xff1a;…

卷积神经网络(CNN)原理与实现

卷积神经网络(CNN) 卷积神经网络原理卷积神经网络的数学推导卷积层反向传播算法数学推导卷积层实现代码 卷积神经网络(CNN) 卷积神经网络原理 卷积神经网络是一种用于图像、语音、自然语言等数据的深度学习模型&#xff0c;其核心思想是使用卷积操作提取输入数据的特征&…

4、通达OA代码审计

一、文件操作 1、文件上传配合文件包含审计 文件上传首先确定存在漏洞的文件。和文件上传相关的函数比如upload。在从上到下分析构造的条件1. 从 POST 请求中提取变量 P 的值。 2. 检查 P 是否已设置且不为空字符串。 3. 如果 P 已设置且非空&#xff0c;进入包含 "inc/…

JavaScript定义函数,创建函数实例时的内部原理

1、定义一个函数&#xff0c;JavaScript内部各做了哪些事情 定义一个函数时&#xff0c;JavaScript内部执行了以下步骤&#xff1a; 解析函数声明: 当你定义一个函数时&#xff0c;JavaScript的解析器会首先解析函数声明。这意味着它会检查函数声明的语法是否正确&#xff0c;…

[NSSCTF 2nd]MyJs

做一题ejs原型链污染 首先是登录界面 源码里面提示了源码的路由 js不熟先审计一下 const express require(express); #导入Express框架&#xff0c;用于构建Web应用程序的服务器和路由 const bodyParser require(body-parser); #导入body-parser中间件&#xff0c;用于解析…

软考证书=职称证书?

官方的回答 根据《计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试暂行规定》&#xff08;国人部发〔2003〕39号&#xff09;规定&#xff0c;通过考试并获得相应级别计算机专业技术资格&#xff08;水平&#xff09;证书的人员&#xff0c;表明其已具备从事相…

学习Android的第二十二天

目录 Android ContextMenu 上下文菜单 ContextMenu 范例 参考文档 Android SubMenu 子菜单 范例 参考文档 Android PopupMenu 弹出菜单 范例 参考文档 Android ContextMenu 上下文菜单 在Android开发中&#xff0c;ContextMenu&#xff08;上下文菜单&#xff09;为…