头歌实训作业 算法设计与分析-贪心算法(第1关:部分背包问题)

部分背包问题


设有编号为1、2、…、n的n个物品,它们的重量分别为w1、w2、…、wn,价值分别为v1、v2、…、vn,其中wi、vi(1≤i≤n)均为正数。

有一个背包可以携带的最大重量不超过W。求解目标:在不超过背包负重的前提下,使背包装入的总价值最大(即效益最大化),与0/1背包问题的区别是,这里的每个物品可以取一部分装入背包。

编程要求


根据提示,在右侧编辑器补充代码,求解部分背包问题。

测试说明


给定n(n<=100)种物品和一个背包。物品i的重量是wi(wi<=100),价值为vi(vi<=100),背包的容量为W(W<=1000)。
应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 

输入:
输入第一行为n和W,分别为物品数量(≤100)和背包容量W(≤1000)。
第二行~第n+1行分别表示每件物品的信息,每行有2个数,分别是物品重量wi(wi<=100)和物品价值vi(vi<=100)。

输出:
输出可以装入背包的物品的最大价值。

样例1:
输入:
3 20
18 25
15 24
10 15

输入解释:3件物品,背包容量为20。
编号为1的物品,重量为18,价值为25。
编号为2的物品,重量为15,价值为24。
编号为3的物品,重量为10,价值为15。

输出:
31.5

输出解释:
装入背包的物品的总价值为31.50。
编号为2的物品整体选择,编号为3的物品选择一半,编号为1的物品不选择。

测试代码 :

//求解背包问题的算法
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;const double EPS = 1e-6;  //比较精度//问题表示
int n;
double W;					//限重
struct NodeType
{double w;double v;double p;					//p=v/wbool operator<(const NodeType &s) const{return p > s.p + EPS;			//按p递减排序}
};vector<struct NodeType> a; //物品结点数组//求解结果表示
double maxv;					// 最大价值
vector<double> x;               // 最优装入方案中各个物品的装入数值
void Knap()						// 求解部分背包问题
{/* 请在这里填写答案 *//**********  Begin  **********//**********  End  **********/ 
}int main()
{cin >> n >> W;a.resize(n);int i;for (i = 0; i < n; i++)cin >> a[i].w >> a[i].v;for (i = 0; i < n; i++)			//求v/wa[i].p=a[i].v/a[i].w;sort(a.begin(), a.end());				//排序Knap();cout<<maxv<<endl;return 0;
}

 补充代码:

//求解背包问题的算法
#include <iostream>#include <string>#include <algorithm>#include <vector>using namespace std;const double EPS = 1e-6; //比较精度//问题表示
int n;
double W; //限重
struct NodeType {double w;double v;double p; //p=v/wbool operator < (const NodeType & s) const {return p > s.p + EPS; //按p递减排序}
};vector < struct NodeType > a; //物品结点数组//求解结果表示
double maxv; // 最大价值
vector < double > x; // 最优装入方案中各个物品的装入数值
void Knap() // 求解部分背包问题
{/* 请在这里填写答案 *//**********  Begin  **********/maxv = 0;double weight = W;for (int i = 0; i < n; i++) {if (a[i].w + EPS <= weight) {x.push_back(1);weight -= a[i].w;maxv += a[i].v;}else if (weight > 0 + EPS) {double p = weight / a[i].w;x.push_back(p);maxv += p * a[i].v;weight = 0;} else {x.push_back(0);}}/**********  End  **********/
}int main() {cin >> n >> W;a.resize(n);int i;for (i = 0; i < n; i++)cin >> a[i].w >> a[i].v;for (i = 0; i < n; i++) //求v/wa[i].p = a[i].v / a[i].w;sort(a.begin(), a.end()); //排序Knap();cout << maxv << endl;return 0;
}

 

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

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

相关文章

第17章:Python TDD回顾与总结货币类开发

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…

MyBatis 注解开发详解

MyBatis 注解开发详解 MyBatis 支持使用注解来进行数据库操作。注解方式将 SQL 语句直接写在 Java 接口中&#xff0c;通过注解来完成 CRUD&#xff08;增删改查&#xff09;操作&#xff0c;省去了使用 XML 配置的繁琐步骤。这种方式适合简单项目或快速原型开发&#xff0c;因…

OpenCV简介、OpenCV安装

OpenCV简介、OpenCV安装 本文目录&#xff1a; 零、时光宝盒 一、OpenCV简介 二、OpenCV图像处理基础知识 三、OpenCV-Python环境安装 2.1、纯python环境下安装OpenCV 2.2、Anaconda管理环境下安装 OpenCV 四、如何用OpenCV 中进行读取展示图像 五、OpenCV读取图像、显…

使用Chrome和Selenium实现对Superset等私域网站的截图

最近遇到了一个问题&#xff0c;因为一些原因&#xff0c;我搭建的一个 Superset 的 Report 功能由于节假日期间不好控制邮件的发送&#xff0c;所以急需一个方案来替换掉 Superset 的 Report 功能 首先我们需要 Chrome 浏览器和 Chrome Driver&#xff0c;这是执行数据抓取的…

react19新API之use()用法总结

React use() Hook 使用指南 概述 use() 是 React 19 引入的新 Hook&#xff0c;它允许你在组件内部直接使用 Promise、Context 和其他可订阅的值。它是一个更通用的数据获取和订阅机制。 基本语法 const value use(resource);主要用途 1. Promise 处理 function UserDet…

Netty到底是什么,解决了什么问题,Netty为什么会火,Netty有什么特性

Netty是一个高性能、异步事件驱动的网络应用框架&#xff0c;它基于Java NIO&#xff08;New Input/Output&#xff09;开发&#xff0c;并对Java NIO进行了封装和扩展。Netty的特性及其解决的问题可以归纳如下&#xff1a; 一、Netty的主要特性 优雅的设计&#xff1a;Netty…

算法专题(三):二分查找

本篇还是像之前一样&#xff0c;以举例子的形式向大家讲解&#xff01;每道题的题目均是传送门&#xff01;点击跳转对应题&#xff01; 目录 一、二分查找 1.1 题目 1.2 思路 1.3 代码实现 总结&#xff08;模版&#xff09; 朴素版&#xff1a; 二、在排序数组中查找…

EXCEL的一些用法记录

按某个分隔符进行拆分多列 【数据】- 【分列】 多列调整成多行 复制 - 粘贴 - 选择【转置】 部分内容替换 SUBSTITUTE()函数 &#xff0c;固定内容 加“”

在k8s中部署一个可外部访问的Redis Sentinel

1.前提条件&#xff1a; 1.部署了multus 想要k8s外部能访问k8s内部的redis&#xff0c;redis-server启动时必须使用multus的IP 2.helm客户端安装 2.开始安装 准备3个multus ip 10.10.10.130 10.10.10.131 10.10.10.132 apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttac…

使用tritonserver完成clip-vit-large-patch14图像特征提取模型的工程化。

1、关于clip-vit-large-patch14模型 关于openapi开源的clip-vit-large-patch14模型的特征提取&#xff0c;可以参考之前的文章&#xff1a;Elasticsearch向量检索需要的数据集以及768维向量生成这篇文章详细介绍了模型的下载地址、使用方式、测试脚本&#xff0c;可以让你一步…

偏序关系.

一、偏序&#xff08;半序&#xff09;关系 偏序关系 自反反对称传递性 二、全序&#xff08;线序、链&#xff09;关系 三、偏序集中的重要元素 1. 极大元与极小元 极大元找所在集合的一个或几个最高点&#xff1b; 极小元找所在集合的一个或几个最低点。 2. 最大元与最小…

2024嵌入式系统的未来发展与技术洞察分享

时间如白驹过隙&#xff0c;不知不觉又是一年&#xff0c;这一年收获满满。接下来&#xff0c;将本年度对技术的感悟和洞察分析如下&#xff0c;希望对大家有所帮助。 在过去几十年里&#xff0c;嵌入式系统技术迅速发展&#xff0c;成为现代电子设备和智能硬件的核心组成部分。…

AQS公平锁与非公平锁之源码解析

AQS加锁逻辑 ReentrantLock.lock public void lock() {sync.acquire(1);}AbstractQueuedSynchronizer#acquire public final void acquire(int arg) {if (!tryAcquire(arg) &&acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt();}addWaiter就是将节点加入…

GIT的常规使用

分别如果提交了两次git,如 sepolicy$ git log commit 695ceb9d8726d1faa72eda7dea1feccf4805b606 (HEAD -> master) Author: kang <xxx.com> Date: Tue Jan 21 11:21:22 2025 0800 usb disk ok commit 3b3ff9f6c7b30370a8a0c2c7f33013995a808641 Author: kang <…

数字电子技术基础(十五)——MOS管的简单介绍

目录 1 MOS的简单介绍 1.1 MOS简介 1.2 MOS管的基本结构 1.3 MOS管工作时的三个区域 1.4 MOSEF的结构的工作原理 1 MOS的简单介绍 1.1 MOS简介 绝缘栅型场效应管&#xff0c;简称MOS管&#xff0c;全称为金属-氧化物-半导体场效应晶体管&#xff08;Metal-Oxide-Semic…

基础入门-传输加密数据格式编码算法密文存储代码混淆逆向保护安全影响

知识点&#xff1a; 1、传输格式&传输数据-类型&编码&算法 2、密码存储&代码混淆-不可逆&非对称性 一、演示案例-传输格式&传输数据-类型&编码&算法 传输格式 JSON XML WebSockets HTML 二进制 自定义 WebSockets&#xff1a;聊天交互较常…

Spring WebFlux 和 Spring MVC 的主要区别是什么?

Spring WebFlux 和 Spring MVC 都是 Spring 框架中用于构建 Web 应用的模块&#xff0c;但它们在设计理念、编程模型、性能特性等方面存在显著区别。以下是它们的主要区别&#xff1a; ### 1. **编程模型** - **Spring MVC**&#xff1a; - **同步和阻塞**&#xff1a;Spri…

Spark/Kafka

文章目录 项目地址一、Spark1. RDD1.1 五大核心属性1.2 执行原理1.3 四种创建方式二、Kafka2.1 生产者(1)分区器(2)生产者提高吞吐量(3) 生产者数据可靠性数据传递语义幂等性和事务数据有序2.2 Broker(1)Broker工作流程(2)节点服役和退役2.3 副本(1)Follower故障细…

10倍数据交付提升 | 通过逻辑数据仓库和数据编织高效管理和利用大数据

数据已经成为企业核心竞争力的关键要素。随着大数据技术的发展&#xff0c;如何高效管理和利用海量的数据&#xff0c;已成为企业在数字化转型过程中面临的重要课题。传统的数据仓库已经不能满足当今企业对数据处理的高效性、灵活性和实时性的需求。在这种背景下&#xff0c;逻…

计算机操作系统类型

计算机操作系统&#xff08;Operating System, OS&#xff09;是管理计算机硬件和软件资源的核心系统软件。根据不同的用途和环境&#xff0c;操作系统可以分为多种类型。以下是主要的计算机操作系统类型&#xff1a; 批处理操作系统&#xff08;Batch Processing OS&#xff0…