阿里巴巴和四十大盗(背包问题)
问题描述:
阿里巴巴闯进了四十大盗的宝藏山洞,山东一共有n种宝物,每种宝物有一定的重量w和相应的价值v,毛驴只能运走m重量的宝物,一种宝物只能拿一样,宝物可以分割,怎样才使价值最大呢?
问题分析:
要在规定的重量内使得价值最大,则要使得物品的价值重量比最大(性价比),维护一个结构体(包含重量、价值、性价比)。对性价比进行从大到小排序,依性价比从高到底的拿走物品直到下一件物品的重量大于背包还剩下的重量,因为物品可被分割最后还应该加上m*s[i].p
代码:
- #include <iostream>
- #include <algorithm>
- using namespace std;
- const int N = 10005;
- struct three
- {
- double w;
- double v;
- double p;
- }s[N];
- bool cmp(const three a, const three b)//递减排序
- {
- return a.p > b.p;
- }
- int main()
- {
- double m;//承载能力
- int n, i;//n代表物品数
- cin >> n >> m;
- for (i = 0; i < n; i++)
- {
- cin >> s[i].w >> s[i].v;
- s[i].p = s[i].v / s[i].w;//价值重量比
- }
- sort(s, s + n, cmp);
- double sum=0.0;
- for (i = 0; i < n; i++)
- {
- if (m > s[i].w)
- {
- m -= s[i].w;
- sum += s[i].v;
- }
- else//最后一件不够分
- {
- sum = sum + s[i].p*m;
- break;
- }
- }
- cout << sum << endl;
- return 0;
- }
阿里巴巴和四十大盗(背包问题)相关推荐
- 2.3阿里巴巴与四十大盗——背包问题
2.3阿里巴巴与四十大盗--背包问题 2.3.1问题分析 2.3.2算法设计 2.3.3 完美图解 2.3.4 伪代码详解 2.3.5 实战演练 2.3.6算法分析及优化拓展 1.算法复杂度分析 2. ...
- 智能优化算法-阿里巴巴和四十大盗算法Ali baba and the Forty Thieves algorithm(附Matlab代码)
引言 阿里巴巴和四十大盗算法Ali baba and the Forty Thieves algorithm是一种新的元启发式算法,用于解决全局优化问题.回想一下著名的阿里巴巴和四十大盗的故事,阿里巴 ...
- 贪心算法之阿里巴巴与四十大盗——背包问题
14天阅读挑战赛 有一天,阿里巴巴赶着一头毛驴上山砍柴.砍好柴准备下山时,远处突然出现一股烟尘,弥漫着向上空飞扬,朝他这儿卷过来,而且越来越近.阿里巴巴心里害怕,担心碰到的是一伙儿强盗,他赶紧把毛驴赶 ...
- 贪心算法--阿里巴巴与四十大盗--背包问题
一.问题描述 有一天,阿里巴巴赶着一头毛驴上山砍柴.砍好柴准备下山时,远处突然出现一股烟尘,弥漫着直向上空非扬,朝他这儿卷过来,而且越来越近.靠近以后,他才看清原来是一支马队,他们公有四十人,一个个年 ...
- 阿里巴巴和四十大盗的故事
很久以前,在波斯国的某城市里住着兄弟俩,哥哥叫戈西母,弟弟叫阿里巴巴.父亲去世后,他俩各自分得了有限的一点财产,分家自立,各谋生路.不久银财便花光了,生活日益艰难.为了解决吃穿,糊口度日,兄弟俩不得不 ...
- 【贪心算法】阿里巴巴与四十大盗——背包问题与0-1背包问题
前言 关于贪心算法,我在这篇博客中已经做了简单的介绍.初识贪心算法 下面来介绍一下贪心算法中的一个经典的问题--背包问题 一.问题描述 一天,阿里巴巴赶着一头毛驴上山砍柴,无意间在远处发现了一群盗贼, ...
- 2.3阿里巴巴与四十大盗 背包问题
有一天,阿里巴巴赶着一头毛驴上山砍柴.砍好柴准备下山时,远处突然出现一股烟尘,弥漫着直向上空飞扬,朝他这儿卷过来,而且越来越近.靠近以后,他才看清原来是一支马队,他们共有四十人,一个个年轻力壮.行动敏 ...
- 【贪心】阿里巴巴与四十大盗-背包问题
题目 阿里巴巴因为偶然的机会进入了强盗们的宝库,他想拿走一些让乡亲们开开眼.他想每种宝物只拿一个,如果太重就用锤子凿开,但毛驴运载能力有限,怎么才能用毛驴运走最大价值的宝物呢? 数据 输入 第一行:宝 ...
- 阿里巴巴四十大盗计算机病毒,阿里巴巴和四十大盗
阿里巴巴心里这样想着,决心探个究竟. 匪徒们在树下拴好马,取下沉甸甸的鞍袋,里面显然装着金银珠宝. 这时,一个首领模样的人背负沉重的鞍袋,从丛林中一直来到那个大石头跟前,喃喃地说道:"芝麻, ...
最新文章
- Node.js 可以和 Web 实现 HTTP 请求的跨平台兼容了!
- 20幅扎心漫画,道尽无数人的人生!30万网友:这简直是在偷窥我生活...
- c++ set 遍历_47. Set 是如何工作的(3) 遍历顺序是如何确定的?
- awk实战:文件里面全是数字,实现大于100的求和并打印出所在行和这些数字的总和...
- php入职头一星期,入职一周就想离职,真的是我太飘了吗?
- DOS批处理不支持将UNC 路径作为当前目录的巧妙解决方案
- Python-Matplotlib可视化(7)——多方面自定义统计图绘制
- java删除文件和文件夹
- 保存网页内容为PDF,支持文本复制,链接跳转
- 如何优化Web网站性能?
- C/C++编程笔记:浪漫流星雨装b表白程序
- Java | 如何优化垃圾回收机制?
- Kaggle—共享单车数据分析
- \xe8\x83\xa5\xe5\xb8\x85\xe6\x9d\xb0转中文
- 让你的照片动起来!四种方法制作照片音乐视频
- Evolutionary Spectral Clustering by Incorporating Temporal Smoothness论文整理
- 基于百度AI实现的语音识别搜索文件
- 清醒看自己,糊涂看别人
- 计算机网络实验一 网络命令
- 12个超炫数据可视化工具
热门文章
- sequoiadb mysql_SequoiaDB 巨杉数据库
- python3 return用法_Python中return语句用法实例分析
- URL、URN、URI 三者之间区别和联系
- Uni-app原生插件基础开发文档
- 乐山市计算机学校龚老师介绍,乐山市计算机学校召开德育工作交流会
- 19 06-读取DTC扩展数据记录
- PhotoView——支持图片缩放、平移、旋转的一个优雅的三方组件
- Python快速编程入门课后程序题答案
- matlab中fcn模块函数怎么写,matlabfcn
- Java如何调用方法的重载_java方法重载时的调用选择