加勒比海盗船——最优装载问题-贪心算法
文章目录
- 加勒比海盗船——最优装载问题
- 问题分析
- 算法设计
- 伪代码详解
- 代码
加勒比海盗船——最优装载问题
在北美洲东南部,有一片神秘的海域,那里碧海蓝天、阳光明媚,这,正式传说中海盗最活跃的加勒比海(Caribbean Sea)。17世纪时,这里更是欧洲大陆的商旅舰队到达美洲的必经之地,所以当时的海盗活动非常猖獗,海盗们不仅攻击过往商人,甚至攻击英国皇家舰……
有一天,海盗们截获了一艘装满各种各样古董的货船,每一件古董都价值连城,一旦打碎就失去了它的价值。虽然海盗船足够大,载重量为C,每件古董的重量为Wi,海盗们如何把尽可能多数量的宝贝装上海盗船呢?
问题分析
首先要确定贪心策略,选择一个你认为最好的方案,运用贪心算法的缺点就是可能得不到最优解。
这道题要求古董的数量尽可能多,而船的容量是固定的,那么优先把重量小的物品放进去,在容量固定的情况下,装的物品最多,这里我就采用这种策略。
算法设计
按照贪心策略,每次选择重量最小的古董放入(tmp代表古董的重量,ans代表已经装载的古董的个数)。
i | 选择排序后第几个 | 装入重量tmp | 是否超过载重量 | ans值 |
---|---|---|---|---|
i=0 | 第一个 | tmp=2 | 否 | 1 |
i=1 | 第二个 | tmp=2+3=5 | 否 | 2 |
i=2 | 第三个 | tmp = 5+4=9 | 否 | 3 |
i=3 | 第四个 | tmp=9+5=14 | 否 | 4 |
i=4 | 第五个 | tmp=14+7=21 | 否 | 5 |
i=5 | 第六个 | tmp=21+10=31 | 超过 | 算法结束 |
伪代码详解
数据结构定义
根据算法设计描述,我们用一维数组存储古董数量:
double w[N];//一维数组存储古董的重量
按重量排序
可以利用C++标准库中的排序函数sort,对古董的重量进行从小到大(非递减)排序。要使用此函数需要引入头文件<algorithm>
语法描述为:
sort(begin, end) //参数begin和end表示一个范围,分别为待排序数组的首地址和尾地址//sort函数默认升序
sort(w, w+n);
大家都会了吗?自己亲手试试吧!先不要往下看,自己思考才是最好的
加勒比海盗船——最优装载问题-贪心算法相关推荐
- 2.2加勒比海盗船——最优装载问题
2.2加勒比海盗船--最优装载问题 2.2.1问题解析 2.2.2算法设计 2.2.3完美图解 2.2.5实战演练 2.2.6 算法解析及优化拓展 1.算法复杂度分析 2.优化拓展 在北美洲东南部,有 ...
- 贪心算法-加勒比海盗船——最优装载问题
实际问题:一群海盗截获了一艘装满各种金银珠宝和古董的货船,每一件宝物都价值连城一旦打碎就失去了价值.海盗船的载重量为C,每件宝物的重量为Wi,海盗们应该如何把尽可能多的宝物装上船? 问题分析:这是一个 ...
- 贪心算法--加勒比海盗船--最优装载问题
一.问题描述 在北美洲南部,有一篇神秘的海域,那里碧海蓝天.阳光明媚.这正是传说中海盗最活跃的加勒比海.17世纪时,这里更是欧洲大陆的商旅舰队到达美洲的必经之地,所以当时的海盗活动非常猖獗,海盗不仅攻 ...
- 【贪心算法】加勒比海盗船——最优装载问题
目录 一.贪心本质 二.贪心的两大重要性质 三.贪心秘籍 四.最优装载问题 五.小结 一.贪心本质 一个贪心算法总是做出当前最好的选择,也就是说,它通过局部最优选择从而得到全局最优的解决方案. --& ...
- 算法笔记:加勒比海盗船---最优装载问题 如何将最多的宝物装上船 贪心求解 C++
问题描述:在北美洲的南部,有一片美丽神秘的海域,名字叫作加勒比海,那里有一群海盗,非常猖獗.有一天海盗收获了很多古董,海盗船的载重为C,每件古董的重量为wi,如何将尽可能多的宝物装上船呢? 思路:很明 ...
- 贪心算法之加勒比海盗船最优装载问题
1.问题 在北美洲东南部,有一片神秘的海域,那里碧海蓝天.阳光明媚,这正是传说中海盗最活跃的加勒比海,这里更是欧洲大陆的商旅舰队到达美洲的必经之地,所以当时的海盗活皇家舰......动非常猖獗,海盗不 ...
- 【贪心】加勒比海盗船-最优装载问题
题目 在北美洲东南部,有一片神秘的海域,那里碧海蓝天.阳光明媚,这正是传说中海盗最活跃的加勒比海.17 世纪时,这里更是欧洲大陆的商旅舰队到达美洲的必经之地,所以当时的海盗活动非常猖獗,海盗不仅攻击过 ...
- 最优装载c语言贪心算法,最优装载(贪心算法)
算法设计例题:最优装载(贪心) memory limit: 32768KB time limit: 1000MS accept: 24 submit: 68 Description 有一批 ...
- 加勒比海盗船——最优装载问题(趣学算法C++代码和python代码)
C++代码: #include<iostream> #include<algorithm> #include<conio.h> const int N=100000 ...
最新文章
- Java:全局变量(成员变量)与局部变量
- MarkdownView:Markdown 文档预览视图组件
- R语言决策树、bagging、随机森林模型在训练集以及测试集的预测结果(accuray、F1、偏差Deviance)对比分析、计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况
- 关于SAMBA的关键参考资源
- War of Inazuma (Easy Version) 阅读理解-n维超立方体-二进制-longlong右移32位
- 【Interfacenavigation】风格和主题(21)
- sql三张表的搜索要满足5种搜索条件的模糊搜索_面试三轮我倒在了一道 SQL 题上……| 原力计划...
- ajax php 返回数组并父子给变量,将字符串变量从PHP发送回数组变量的ajax ...?
- linux scp限制传输速度
- Eclipse 中 Could not find *.apk的解决方案
- 计算机怎么剪切音乐然后合在一起,怎么在电脑裁剪歌曲 怎么裁剪和拼接音乐...
- Android Studio快捷键设置 (实现原eclipse ctrl+m 代码全屏的效果)
- 拓展题 系列I之科普系列
- 怎样裁切图片?如何将图片剪裁成需要的大小?
- 史丰收速算-第五届蓝桥杯省赛
- 华为应用市场AGC研习社|如何提升投放转化,实现获量增长?
- 观张国荣的电影《霸王别姬》有感
- 只要能言之有理,持之有据,则可立于讲台
- 目标拦截问题—微分对策
- linux 怎么把新硬盘分区,linux添加新硬盘分区