算法设计与分析 | 一般背包问题

2024-01-04

题目描述

某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为 W, 的物品。岛上金属有 s 个种类, 每种金属重量不同,分别为 n 1, n 2 ,n 3 ... n s ,同时每个种类的金属总的价值也不同,分别为 v 1 ,v 2 , ...v s 。KID想一次带走价值尽可能多的金属,

问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比。

输入

第1行是测试数据的组数k,后面跟着k组输入。

每组测试数据占3行,第1行是一个正整数 w(1<=w<=10000) ,表示口袋承重上限。第2行是一个正整数 s (1 <= s <=100) ,表示金属种类。第3行有 2s 个正整数,分别为 n 1 , v 1 , n 2 , v 2 , ... , n s , v s 分别为第一种,第二种,...,第s种金属的总重量和总价值 (1<= n i <= 10000, 1<=v i <=10000)

输出

k行,每行输出对应一个输入。输出应精确到小数点后2位。

样例输入

2
50
4
10 100 50 30 7 34 87 100
10000
5
1 43 43 323 35 45 43 54 87 43  
样例输出

171.93
508.00  

分析:

一般背包问题与0-1背包问题其实是类似的,只不过一般背包问题可以把一个物品拆分为部分物品进行装载。

因此,在考虑放入物品时,应当选择所有(剩余)物品中价值比(*单位重量的价值)最高的一个放入,那么就可以使用sort()方法进行排序,a里面的avg就是降序的,然后考虑背包(剩余)容量,选择放入物品的多少部分。

sort(nums.begin(), nums.end(), compare);

如果想进行降序排序,可以提供一个自定义的比较函数,即根据自己内容确定的判断规则

代码:

#include <bits/stdc++.h>

using namespace std;

const int N = 100;
struct Node {
    int w, v;
    double avg;
} a[N];

bool cmp(Node a, Node b)
{
    return a.avg > b.avg;
}

int main()
{
    int k, w, s;
    scanf("%d", &k);
    while (k--) {
        scanf("%d%d", &w, &s);
        for (int i = 0; i < s; i++) {
            scanf("%d%d", &a[i].w, &a[i].v);
            a[i].avg = (double)a[i].v / (double)a[i].w;
        }

        sort(a, a + s, cmp);

        double tot = 0;
        for (int i = 0; i < s; i++)
            if (w >= a[i].w) {
                w -= a[i].w;
                tot += a[i].v;
            }
            else {
                tot += w * a[i].avg;
                break;
            }

        printf("%.2f\n", tot);
    }

    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法设计与分析 | 一般背包问题 的相关文章

  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock

随机推荐

  • 视频直播技术干货(十一):超低延时视频直播技术的演进之路

    本文由字节跳动技术团队李晨光 匡建鑫 陈鉴平分享 本文有修订和改动 1 引言 新媒体互动直播已成为了广大网民最重要的休闲娱乐方式之一 丰富的传统文化 新闻 竞技体育 法律 知识共享等内容 通过移动端互动直播的形式得以更加高效的展现传播 既让
  • 数据光端机技术进展:高速数据通信的未来

    数据光端机技术进展 高速数据通信的未来 在信息技术迅猛发展的今天 数据光端机 已站在高速数据通信的前沿 它不仅象征着通信技术的飞跃 还为海量数据的迅速传递铺平了道路 核心特征 超高速的传输效率 数据光端机利用尖端光纤技术 实现了前所未有的数
  • 音频翻译文字软件哪个好用?猜你在找这几个翻译工具

    随着跨语言交流的深入发展 音频翻译技术的应用也越来越广泛 有了这项技术 大家可以在各个领域中快速实现跨语言的交流和理解 进一步实现跨语言的即时沟通 而随着这项技术的不断发展 音频翻译的准确率和实时性也在不断提高 许多应用有这项技术的翻译工具
  • prometheus grafana nginx 安装配置和使用

    文章目录 前传 prometheus exporter容器 监控nginx nginx需要加载stub status监控 查看有没有 如果有 去配置下nginx 重要 需要重启nginx 测试监控是否成功 prome
  • 字符串处理-第11届蓝桥杯省赛Python真题精选

    导读 超平老师的Scratch蓝桥杯真题解读系列在推出之后 受到了广大老师和家长的好评 非常感谢各位的认可和厚爱 作为回馈 超平老师计划推出 Python 蓝桥杯真题解析100讲 这是解读系列的第26讲 字符串处理 本题是2020年6月20
  • css 文字闪烁

    flicker color dd4814 animation masked animation 1 5s linear infinite webkit animation masked animation 1 5s linear infin
  • 新导物联rfid人员定位管理系统

    rfid人员定位管理系统是一个智能化的人员定位导航和监控系统 它具备数据信息收集 精确查询 统计分析等功能 rfid人员定位管理系统 包含了人员信息数据搜集 统计分析和管理方法三个层面的内容 在人员信息数据收集层面 可以实现不同单位 不同身
  • 欢迎来到阿清的数据分析求职分享

    大家好 我是阿清 在这里 我将与大家分享关于数据分析岗位求职路上的点点滴滴 包括行业和岗位的深入见解 求职技巧 面试准备方法 以及实战案例分析等等 关于我 正经工作履历 2015年东南大学计算机专业研究生毕业 校招身份加入了阿里 最初参与面
  • C#属性介绍

    文章目录 一 简要介绍 二 详细介绍 2 1 例子 2 2 属性和字段的比较 2 3 自动实现属性 2 4 静态属性 2 5 只读 只写属性 2 6 属性可访问性
  • HDMI光端机技术概述:高清多媒体传输的前沿

    在数字多媒体传输领域 HDMI光端机 代表着高清传输技术的前沿 作为现代视听设备的标准接口 HDMI光端机在高清视频和音频传输方面的应用日益广泛 它不仅支持更高的分辨率和更丰富的色彩 还提供了更加稳定和高效的传输方式 技术特点 高清晰度传输
  • 实验笔记之——下载数据到服务器

    开发过程中经常需要把数据传到服务器上 太麻烦了 为此本博文记录采用百度云来传输数据 百度云 使用 bypy 包 安装 pip install bypy 配置bypy连接百度网盘 终端输入bypy info 将命令行提示的链接复制到浏览器 并
  • 技术大拿私房课:掌握Task、Thread、ThreadPool的终极秘籍!

    大家好 我是小米 在这个充满技术和创新的时代 作为一名喜欢分享的技术探索者 我想和大家聊一聊一些在社招面试中常常被提到的热门话题 task thread threadpool 这是一组关于并发编程的核心问题 也是我们在日常工作中不可避免要面
  • A Survey of Graph Meets Large Language Model: Progress and Future Directions

    本文是LLM系列文章 针对 A Survey of Graph Meets Large Language Model Progress and Future Directions 的翻译 当图遇到大型语言模型综述 进展与未来方向 摘要 1
  • CAN光端机技术指南:工业网络通信的高效解决策略

    在现代工业自动化和车辆网络通信中 CAN光端机 技术扮演着不可或缺的角色 它为控制器局域网 Controller Area Network CAN 提供了高效 稳定的数据传输解决方案 使得在复杂和严苛的工业环境中 数据通信更加可靠和高效 技
  • Vivado ILA的debug信息保存与读取

    保存 write hw ila data D Project FPGA ILA Debug Data 202401041115 ila upload hw ila data hw ila 1 读取 display hw ila data r
  • 数据分析求职-岗位介绍

    这是咱们干货开始的第一篇文章 后续我尽量会保持日更的节奏和大家做分享 在未来所有分享的内容展开之前 咱们有必要先彻底 深入地了解下数据分析这个岗位 如果你还在犹豫是否要走数据分析的路 或者你已经拿了数据分析的offer想了解下将来会做什么
  • d3dcompiler_43.dll丢失怎么修复?怎么解决

    在计算机使用过程中 我们经常会遇到一些错误提示 其中之一就是 找不到d3dcompiler 43 dll文件 那么 d3dcompiler 43 dll是什么文件 它的作用是什么 如果缺失了该如何修复呢 本文将详细介绍d3dcompiler
  • docker login失败 x509: certificate relies on legacy common name field use sans instead

    执行docker pull和docker login都不成功 docker pull Using default tag latest Error response from daemon Get https xx comv2 x509 c
  • 【linux】日志管理和分析

    一 概述 在Linux系统的管理和运维中 日志文件起到至关重要的作用 它们记录了系统运行过程中的各种事件 包括系统故障 性能数据和安全事件 二 日志的作用和分类 日志的作用 日志文件记载了系统的生命线 利用它们可以 1 诊断系统故障 2 监
  • 算法设计与分析 | 一般背包问题

    题目描述 某天KID利用飞行器飞到了一个金银岛上 上面有许多珍贵的金属 KID虽然更喜欢各种宝石的艺术品 可是也不拒绝这样珍贵的金属 但是他只带着一个口袋 口袋至多只能装重量为 W 的物品 岛上金属有 s 个种类 每种金属重量不同 分别为