算法设计与分析—贪心法求解背包问题C++(学习笔记)

2023-11-10

 用贪心法求解如下背包问题的最优解:有7个物品,重量分别为(2,3,5,7,1,4,1),价值分别为(10,5,15,7,6,18,3),背包容量W=15。写出求解过程。

#include<iostream>
#include <algorithm>
using namespace std;

typedef struct {        //利用结构体联系w和v
	int w;
	int v;
}act;

bool comp(act a, act b) {
	return a.v / a.w > b.v / b.w;              //比较排序
}

int knapsack(act *a, int n, int c) {
	int i;                           //将物品i装入背包
	double x[10] = { 0 };            //物品可部分装入
	int maxvalue = 0;

	for ( i = 0; a[i].w < c; i++) {
		x[i] = 1;
		maxvalue += a[i].v;
		c = c - a[i].w;             //背包容量剩余
	}

	x[i] = (double)c / a[i].w;       //物品i装入一部分
	maxvalue += x[i] * a[i].v;
	return maxvalue;                 //返回背包获得的价值

}

int main() {
	int n;
	cin >> n;
	int c;
	cin >> c;
	act* a = new act[n];

	for (int i = 0; i < n; i++) {
		cin >> a[i].w >> a[i].v;
	}
	
	sort(a, a+n,comp);

	for (int i = 0; i < n; i++) {
		cout << a[i].v << "/" << a[i].w << "得" << a[i].v / a[i].w<<endl;
	 }
	
	int p=knapsack(a, n, c);
	cout <<"最大价值为" << p;

}

 运行截图 :                                                                

 

                                                                                                                                       2020.12.5

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

算法设计与分析—贪心法求解背包问题C++(学习笔记) 的相关文章

随机推荐

  • 关于&&运算符的机制以及=和>的运算优先级

    今天碰到问题的代码是这样的 最开始以为会输出3 以为 和 gt 的优先级一样 后来查询发现比较运算符的优先级大于赋值运算符 于是觉得输出应该是0 结果输出2 经查询发现是 在判断前一个条件为0后就不会再去判断第二个条件了 以前没见过这个说法
  • 第九届GIS技能应用大赛试题技术文档 -上午

    1 项目概述 1 1 项目要求 如图1 1 1所示为雷尼尔山国家公园 根据题目要求 现有一份雷尼尔山国家公园地形图的一部分扫描图 需要利用该扫描图制作三维模型用来分析和展示 图1 1 1 雷尼尔山国家公园 1 具体任务要求如下 任务一 使扫
  • 递归锁(Recursive Lock)也称为可重入互斥锁(reentrant mutex)

    递归锁 Recursive Lock 也称为可重入互斥锁 reentrant mutex 是互斥锁的一种 同一线程对其多次加锁不会产生死锁 递归锁会使用引用计数机制 以便可以从同一线程多次加锁 解锁 当加锁 解锁次数相等时 锁才可以被其他线
  • response对象设置返回状态_测试开发专题:spring-boot自定义异常返回

    上文测试开发专题 spring boot统一异常捕获我们讨论了java异常以及如何使用Spring Boot捕获异常 但是没有去说捕获异常后该如何进一步处理 这篇文章我们将对这个遗留的问题进行讨论 统一错误响应定义 我们希望在程序发生异常的
  • Linux操作系统之进程间通信—信号量

    文章目录 一 信号量的定义 二 信号量的使用 三 ipcs的使用 一 信号量的定义 信号量是一个特殊的变量 一般取正数值 它的值代表允许访问的资源数目 获取资源时 需要对信号的值进行原子减一 该操作被称为p操作 当信号量值为0时 代表没有资
  • Java复习-20-接口(3)- 代理设计模式

    代理设计模式 Proxy 功能 可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上 代理模式 Proxy Pattern 是一种结构性模式 代理模式为一个对象提供了一个替身 以控制对这个对象的访问 即通过代理对象访问目标目标对象 可
  • Mysql 查询当前时间24小时内的数据

    记录一下mysql查询24小时内的sql语句 where time gt NOW interval 24 hour
  • C++中的内存对齐介绍

    网上有很多介绍字节对齐或数据对齐或内存对齐的文章 虽然名字不一样 但是介绍的内容大致都是相同的 这里以内存对齐相称 注 以下内容主要来自网络 内存对齐 通常也称为数据对齐 是计算机对数据类型合法地址做出了一些限制 要求某种类型对象的地址必须
  • ESP32+Arduino环境搭建教程 合宙ESP32C3

    1 在arduino官网下载安装包并安装 下载地址 https www arduino cc en software 2 安装Arduino对ESP32支持 1 添加ESP32开发板管理器地址 点击文件 gt 首选项 gt 其他开发板管理器
  • Introspector内存溢出的原理解析

    JavaBeans Introspector是一个类 位置在Java bean Introspector 这个类的用途是发现java类是否符合javaBean规范 也就是这个类是不是javabean 具体用法可以参照jdk文档 上面的意思就
  • 常用音频接口:TDM,PDM,I2S,PCM

    折腾 整理 SoC CPU MEDIATEK MT8516详解 期间 看到T8516介绍中包含 麦克风语音输入控制和连接的音频产品中包含 I2Sx2 4 个频道 TDM 最多 8 个频道 和 PDM 输入 2 个频道 等广泛的接口 不太熟悉
  • 中国猎头公司排名 (前十)

    4月3日 平时能够收到不少猎头公司排名评选的邀请 但自己一直怀疑这类排名评选的可行性和公信力 人为因素在这样的评选中占了太大的成分 因为喜欢搜索这个职业 所以我一直是一个谷歌Google的粉丝 Google的成功和深入人心和它坚持自己的 搜
  • hue+oozie并发集群阻塞的调优经历

    hue oozie并发集群阻塞的调优经历 问题描述 使用hue oozie进行数据仓库开发 部署了大量workflow和并发任务 定时晚上集中时间执行时出现任务卡死状态 全部是oozie launcher的job任务 方案一 调大集群资源
  • keras ANN 分类实战

    import pandas as pd import numpy as np from sklearn model selection import train test split from keras utils import np u
  • Javascript: hash tables in javascript

    Copyright 2010 Tim Down Licensed under the Apache License Version 2 0 the License you may not use this file except in co
  • 软件授权注册码_授权码授予

    OAuth是一种开放的授权标准 可让客户端代表资源所有者访问受保护的服务器资源 资源所有者可以是其他客户端或最终用户 OAuth还可以帮助最终用户授权第三方访问其服务器资源 而无需共享其凭据 例如用户名和密码 本系列文章遵循RFC6749中
  • mysql开启事件调度失败_MySQL事件调度器无效的问题原因以及解决方法

    最近写了个定时事件 发现无法执行 先在my ini中加了配置event scheduler ON 重启MySQL无效 在navicat中直接执行 SET GLOBAL EVENT SCHEDULER ON 会报错 错误信息是 Error C
  • https://app.hackthebox.com/machines/Soccer

    https app hackthebox com machines Soccer kwkl kwkl cat etc hosts 1 127 0 0 1 localhost 127 0 1 1 kwkl kwkl kwkl The foll
  • 基本术语(告诉你西瓜书为什么叫西瓜书)

    为什么这本 机器学习 封面会有很多西瓜 为什么要叫他西瓜书 就因为封面是西瓜 因为所有的这些个基本术语的理解和后续一些问题的解释以及比喻 周大大都是用西瓜来做比喻滴 通俗易懂 恰到好处 注意 下面只做我归纳的简单介绍 如有不全 可以去百度一
  • 算法设计与分析—贪心法求解背包问题C++(学习笔记)

    用贪心法求解如下背包问题的最优解 有7个物品 重量分别为 2 3 5 7 1 4 1 价值分别为 10 5 15 7 6 18 3 背包容量W 15 写出求解过程 include