题目来自陈小玉教授的《趣学算法》,参考书中的讲解,结合自己的思考,便于以后复习。

问题

长江俱乐部在长江设置了6个游艇出租站1,2,…6,游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 i i i到游艇出租站 j j j之间的租金为 r ( i , j ) r(i,j) r(i,j), 现在要求游艇从出租站1到出租站6所需要的最少租金。

r(i,j):1  2  3  4  5  61 [ 0  2  6  9 15 20]2 [ 0  0  3  5 11 18]3 [ 0  0  0  3  6 12]4 [ 0  0  0  0  5  8]5 [ 0  0  0  0  0  6]6 [ 0  0  0  0  0  0]

思路

暴力搜索

如果使用暴力搜索方法的话,可以依次遍历只停靠1次 C 4 1 C_4^1 C41​,停靠2次 C 4 2 C_4^2 C42​,停靠3次 C 4 3 C_4^3 C43​,停靠4次 C 4 4 C_4^4 C44​,一共 C 4 1 + C 4 2 + C 4 3 + C 4 4 C_4^1+C_4^2+C_4^3+C_4^4 C41​+C42​+C43​+C44​种可能,如果中间可停靠码头数目特别多的话( n n n个),搜索空间会特别大, C n 1 + . . . + C n n C_n^1+...+C_n^n Cn1​+...+Cnn​。

动态规划

所以考虑是不是可以利用动态规划的思想,将一个大问题化成很多小问题。但是使用动态规划需要一个前提:从第1站到第 n n n站的最优解包含前 n − 1 n-1 n−1站的最优解,是否具有最优子结构和重叠性。

因此可以使用动态规划的思想,该问题得最优解一定由子问题得最优解组成。
算法思路:
初始化 m [ i ] [ j ] = r [ i ] [ j ] m[i][j]=r[i][j] m[i][j]=r[i][j]储存各子问题最低代价,初始化 s [ i ] [ j ] = 0 s[i][j]=0 s[i][j]=0存储各个子问题最低代价的停靠点。
interval表示跨度为interval的两个站点。逐渐增大interval,依次算它们的最小花费,直到最后的终点。

因为相邻两点的代价已经知道,interval=1不需要考虑。

  • interval=2
    中间停靠点只有一个,依次遍历求得1到3,2到4,3到5,4到6的最低代价。
  • interval=3
    依次遍历求得1到4,2到5,3到6的最低代价。中间停靠点有2个,需要依次考虑。例如:1到4,最优的停靠点可能是2或3。
  • interval=4
    依次遍历求得1到5,2到6。中间停靠点有3个,需要依次考虑。因为间隔为2两点的最优解已经算过,直接查表即可。
  • interval=5
    求得1到6的代价,中间停靠点可能有4个,依次遍历,最优值即为最优解。

根据 s [ i ] [ j ] s[i][j] s[i][j]可得到需要停靠哪些点。

python代码实现:

import numpy as np# 1号点到2、3。。。6节点的代价
# 2号点到3。。。6节点的代价
# 。。。
# 5号点到6号节点的代价
r = [[2, 6, 9, 15, 20],[3, 5, 11, 18],[3, 6, 12],[5, 8],[6]
]def leastCost(r):# 一共points个点points = len(r) + 1# 初始化记录代价和停靠点矩阵m = np.zeros((points, points), dtype=np.int16)s = np.zeros((points, points), dtype=np.int16)# 为m矩阵赋初值等于rfor row in range(len(r)):for col in range(len(r[row])):m[row][row+col+1] = r[row][col]print(m)# 遍历不同间隔for interval in range(2, points):# 遍历不同起点for start in range(points - interval):end = start + interval# 遍历两点间不同中间节点for k in range(start, end):if m[start][k] + m[k][end] < m[start][end]:m[start][end] = m[start][k] + m[k][end]s[start][end] = kprint(m)print(s)# 显示途径停靠节点的结果showStopPoint(s, 0, len(r))def showStopPoint(s, start, destination):stopPoint = s[start][destination]if stopPoint != 0:# 递归查看停靠的节点showStopPoint(s, start, stopPoint)print('停靠点:', stopPoint+1)showStopPoint(s, stopPoint, destination)leastCost(r)

动态规划——游艇租赁问题相关推荐

  1. php博客手机版模板下载器,【织梦模板下载】高端响应式游艇租赁类网站模板(自适应手机端) PHP源码带数据...

    模板名称: 响应式游艇租赁类网站织梦模板(自适应手机端)+PC+wap+利于SEO优化 模板介绍: 织梦最新内核开发的模板,该模板属于电缆.电线类企业都可使用, 这款模板使用范围极广,不仅仅局限于一类 ...

  2. 【练习】2021下半年数据结构刷题笔记和总结 (一)(图和动态规划)

    文章目录 1.编程将一个字符串中所有空格替换为"%20" 2.定两个字符串,判断一个字符串是否是另一个字符串的排列 3.求一个房间内有数个钩子,给定一定长度的绳索,要把所有的钩子用 ...

  3. 【动态规划】小石子游戏-石子合并

    题目 一群小孩子在玩小石子游戏,游戏有两种玩法. (1)路边玩法 有n堆石子堆放在路边,现要将石子有序地合并成一堆,规定每次只能移动相邻的两堆石子合并,合并花费为新合成的一堆石子的数量.求将这N堆石子 ...

  4. 互联网晚报 | 3月27日 星期日 | 东航已正式启动理赔工作;第二部黑匣子数据存储单元外观较为完好,其他部分损毁严重...

    东航已正式启动理赔工作 东航集团宣传部部长刘晓东在27日下午的"3·21"东航MU5735航空器飞行事故国家应急处置指挥部第八场新闻发布会上表示,公司已经正式启动理赔工作,将依据国 ...

  5. php网页是什么样,网页php开发是什么意思

    摘要 腾兴网为您分享:网页php开发是什么意思,中日翻译,指南针,余额宝,永辉生活等软件知识,以及动态壁纸大师,企鹅阅读,福建省中小学生安全知识竞赛,热成像相机,流动人口平台,m1139打印机驱动,厦 ...

  6. (2024最新)毕业设计题目源码-毕业论文参考

    目录 java语言 ssm框架 springboot框架 微信小程序 jsp+servlet+mysql jsp+servlet+sqlserver ssh框架 springmvc框架 oracle ...

  7. 7-11 租用游艇问题 (15 分)(思路+详解+一步步分析+网格解决动态规划问题)Come boy!!!!

    一:题目 题目来源:王晓东,<算法设计与分析> 长江游艇俱乐部在长江上设置了n个游艇出租站1,2,-,n.游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇.游艇出租站i ...

  8. 算法租用游艇问题c语言,动态规划租用游艇问题

    租用游艇动态规划解决 长江俱乐部在长江设置了n个游艇出租站1,2,-n,游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇.游艇出租站i到游艇出租站j之间的租金为r(i,j),设计一 ...

  9. 租用游艇问题 石子合并问题 动态规划实验

    实验名称:动态规划 一.实验预习 1.实验目的 1. 理解并掌握动态规划方法的设计思想: 2. 提高应用动态规划方法解决问题和设计算法的能力: 3. 通过编程实现租用游艇问题和石子合并问题,进一步理解 ...

最新文章

  1. 第一门编程语言的选择无关紧要?
  2. codeblock 带mingw的版本_云顶之弈10.22新版本最强阵容排名 10.22版本吃鸡阵容推荐...
  3. adb install 和adb uninstall
  4. 英特尔cpu发布时间表_10纳米来了:英特尔十一代酷睿,性能升20%,AI算力乘5倍...
  5. Visual Studio生成汇编列表文件(listing file)
  6. Python实现各种进制转换问题,so easy
  7. 帆软报表插件开发之fine-decision中的LogInOutEventProvider扩展
  8. 利用Zipkin对Spring Cloud应用进行服务追踪分析
  9. DevExtreme移动开发框架
  10. intellij常用快捷键
  11. c语言内循环和外循环作用是什么,空调内循环和外循环的作用
  12. Qunee For Html5 开发清新、高效的拓扑图组件
  13. 大数据分析的学习感悟
  14. fastboot简介(android烧录指令)
  15. 在MS Word 中添加 Mathtype 插件(vbe6ext.olb不能被加载问题 已解决)
  16. 基于JavaEye-API实现的Gerry-聊天QQ版v2.0
  17. TTMS剧院票务管理系统全网最全!!!不接受反驳
  18. syntactic与semantic
  19. 第一部分 知己知彼
  20. 情人节简单浪漫烟花html的代码

热门文章

  1. 又上热搜!多所高校取消硕士新生奖学金
  2. 新潮流形势下平台化电商还有优势吗?
  3. Web前端自学,VScode是不是首选?
  4. ASP.NET MVC ---MVC中验证码
  5. 库卡机器人bco运动_《KUKA工业机器人操作与编程》项目三运动编程.pdf
  6. 怎么变更linux lv大小,Linux的lvm管理:修改LV大小
  7. 【Python】Quoted-Printable编码与字符串的相互转换
  8. 通俗易懂的五星评价代码——微信小程序如何展示像淘宝天猫那样五星好评?
  9. mac mini纯键盘操作连接蓝牙鼠标
  10. 干货解读 |大数据,数据挖掘,机器学习的区别和联系