贪心法求解背包问题

2023-10-28

编写程序,输入一组物体重量以及它们的价值大小,对每一个物体求出它对的价值重量比,按由大到小的顺序排列,每一次取出这个比值最大且物体可以被包装下的物体,直到包装满为止。输出装入背包的物体,并给出装入物体的编号以及它们各自的价值和装入背包的物体总价值。

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

typedef struct{
	float p;
	float w;
	float v;
	int order;
}OBJECT;

float x[10];

void select_sort(OBJECT *instance,int n){
	int i,j;
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++){
			if(instance[i].v<instance[j].v){
				OBJECT t=instance[i];
				instance[i]=instance[j];
				instance[j]=t;
			}
		}

}


float knapsack_greedy(float M,OBJECT instance[],float x[],int n){
	int i;
	float m,p=0;
	for(i=0;i<n;i++){
		instance[i].v=instance[i].p/instance[i].w;
		x[i]=0;
	}
	select_sort(instance,n);
	m=M;
	for(i=0;i<n;i++){
		if(instance[i].w<=m){
			x[i]=1;
			m-=instance[i].w;
			p+=instance[i].p;
		}
		else{
			x[i]=m/instance[i].w;
			p+=x[i]*instance[i].p;
			break;
		}
	}
	return p;
}

void main(){
	float M;
	OBJECT instance[10];	
	cout<<"背包载重量:"<<endl;
	cin>>M;
	cout<<"请输入存放物体的价值和重量:"<<endl;
	for(int i=0;i<5;i++){
		cout<<"物品"<<i+1<<":"<<endl;
		instance[i].order=i+1;
		cin>>instance[i].p>>instance[i].w;
	}
	cout<<"背包中物品的总价值为:"<<knapsack_greedy(M,instance,x,5);	
	cout<<endl;
	cout<<"装入的物体有:"<<endl;
	for(i=0;i<5;i++){
		if(x[i]!=0){
			cout<<"物品"<<instance[i].order<<" 价值:"<<x[i]*instance[i].p<<endl;
		}
	}

}

运行结果

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

贪心法求解背包问题 的相关文章

随机推荐

  • Web Server市场占有率调查

    目录 一 理论 1 Web Server市场占有率调查 一 理论 1 Web Server市场占有率调查 1 netcraft 查询 每月netcraft公司都会出一次调查报告 netcraft官方 Netcraft Leader in P
  • 【开发技术经验分享精华版】计算机毕业设计吊打导师Spark+SpringBoot文档主题词自动提取分析与推荐系统 文本分类

    开发技术 前端 vue js 后端 springboot mybatis plus 数据库 mysql 算法 机器学习 深度学习 IK分析 lstm情感分析 文本分类 大数据分析 spark echarts hadoop 特色 创新点 文档
  • leetcode743. 网络延迟时间(中等, dijkstra)

    思路 单源最短路径 gt dijkstra 模板 class Solution public using PII pair
  • GOM 登录器源码及编译教程

    常见登录器引擎如下 BLUE LEGEDN引擎 一般应用于1 70 1 76 复古 80英雄合击 85英雄合击版本 MirXM2引擎 一般应用于1 70 1 76 复古 80英雄合击 85英雄合击版本 3km2引擎 一般应用于1 95 英雄
  • matlab 快速均匀采样

    目录 一 算法概述 二 代码实现 三 结果展示 四 测试数据 一 算法概述 实现从every k points个点中选取一个来达到下采样的目的 二 代码实现 清空变量 clc clear close all
  • java找不到符号解决办法

    一 java找不到符号 如果你的代码里没有报错 明明是存在的 但是java报错找不到符号 像下面这样子 二 解决步骤 1 清除编码工具缓存 本人用的idea eclipse清除缓存方式有需要的可以百度一下 2 如果是mavne项目的 先cl
  • valid 与 same的卷积方式

    http www jianshu com p 05c4f1621c7e 这个简书的作者已经写得很清楚了
  • spss 异常值

    spss 异常值剔除 用什么方法 1 可以通过 分析 下 描述统计 下 频率 的 绘制 直方图 看图发现频数出现最少的值 就可能是异常值 但还要看距离其它情况的程度 2 可通过 分析 下的 描述统计 下的 探索 下的 绘制 选项的 叶茎图
  • 嵌入式AI-K210篇-硬件-模型训练、部署

    K210的其他参数如下 双核 64 bit RISC V RV64IMAFDC RV64GC CPU 400MHz 可超频到600MHz 双精度 FPU 8MiB 64bit 片上 SRAM 6MiB通用SRAM 2MiB的AI专用SRAM
  • 谷歌机器学习:问题构建 (Framing):机器学习主要术语

    谷歌机器学习 问题构建 Framing 机器学习主要术语 地址 https developers google cn machine learning crash course framing ml terminology 什么是 监督式
  • Linux只允许特定IP访问特定端口

    目录 1 查看 开启 关闭防火墙 2 查看 开放 关闭端口 3 给指定的IP开放 关闭指定的端口 4 规则的持久化位置 5 其它命令 1 查看 开启 关闭防火墙 查看服务器的防火墙状态可使用如下命令 查看防火墙状态 systemctl st
  • sqlserver单独备份某个表_T+应急备份和恢复数据方法汇总

    对于企业系统管理员来讲 定时地将企业数据备份出来存储到不同的介质上 如常见的光盘 网络磁盘等等 对数据的安全性是非常重要的 如果企业由于不可预知的原因 如地震 火灾 计算机病毒 人为的误操作等等 造成数据损失或丢失 需要对数据进行恢复 此时
  • 快速搭建你的MQTT服务器

    MQTT服务器在Linux和Windows上的搭建稍微有些区别 不过使用第三方开源的项目一般会有比较详细的说明文档 不做过多赘述 笔者搭建环境是windows10 ActiveMQ 1 windows MQTT服务器下载 https act
  • neo4j修改节点(包括属性,关系)

    将 傅式级数 这个节点删除 并把 单位冲激序列的傅里叶变换 这个节点 指向 傅氏级数 这个节点 match r where id r 76247 detach delete r match p KnowledgeBlock name 单位冲
  • Sass 条件-循环语句

    学习Sass中 if else for while each 一 条件判断 if else 示例 1 mixin blockOrHidden boolean true 2 if boolean 3 debug boolean is bool
  • OpenCV机器视觉-边缘与轮廓

    边缘与轮廓 基于图像边缘提取或二值化的基础寻找对象轮廓 边缘提取的阈值会最终影响轮廓发现的结果 主要API要有以下俩个 findContours发现轮廓 drawContours绘制轮廓 查找轮廓 处理的图像 轮廓列表 继承关系 cv fi
  • druid的解密

    项目中往往配置的数据库密码不是明文 当我们的数据库配置的密码是一系列的你看不懂的文字时 你就应该考虑是不是是druid的加解密了 使用druiid的加解密 首先应该配置依赖
  • 简易虚拟培训系统-UI控件的应用3

    目录 Button组件的组成 Button组件方法1 在Button组件中设置OnClick 回调 Button组件方法2 在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中 本篇增加使用按钮来控制显示哪
  • 牛客网SQL题目解析(答案+解析+理解)

    本文记录了牛客网sql全部题目的答案与难题解析 部分题目包含多种解法 并且涵盖了开窗函数等各种语法点的理解 标题中高亮的题目 是易错题 牛客网刷题链接 牛客网sql在线练习 本文所有语句使用mysql8 0 参考教程资源 mysql教程1
  • 贪心法求解背包问题

    编写程序 输入一组物体重量以及它们的价值大小 对每一个物体求出它对的价值重量比 按由大到小的顺序排列 每一次取出这个比值最大且物体可以被包装下的物体 直到包装满为止 输出装入背包的物体 并给出装入物体的编号以及它们各自的价值和装入背包的物体