算法分析与设计实验-游艇租用问题
游艇租用问题
问题描述
长江游艇俱乐部在长江上设置了n个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1i<jn。试设计一个算法,计算出从游艇出租站1到游艇出租站n所需的最少租金
编程任务
对于给定的游艇出租站i到游艇出租站j之间的租金为r(i,j),1i<jn,编程计算从游艇出租站1到游艇出租站n所需的最少租金。
数据输入
由文件input.txt提供输入数据。文件的第1行中有1个正整数n(n<=200),表示有n个游艇出租站。接下来的n-1行是r(i,j),1i<jn。
实验设计
此算法以租站位置作为下标值,可得出动态规划方程:
update_rent[i][j] = 0;
update_rent[i][j] = 1;
update_rent[i][j] = min(update_rent[i][k]+update_rent[k][j],update_rent[i][j]),i<k<j;
从文件读入数据with open(fileinput) as file_object:
生成矩阵data=np.zeros([n-1,n],dtype=np.int);
根据文件内容初始化矩阵
核心算法;
def RentYacht(stops,data):
#1.判断站点数量
if stops == 1:
返回0
elif stops == 2:
直接返回两个站点之间的距离
else:
for d in range(2,stops): # 将问题分解为n-2个子问题
for i in range(stops-d):
j = i+d
for k in range(i+1,j): # 每个子问题的最优结果 update_rent[i][j]min(update_rent[i][k]+update_rent[k][j],update_rent[i][j]),i<k<j;
file=open(fileoutput,"w") #写入文件
file.write(str(data[0][-1]))
实验代码
#coding=gbk
#coding:utf-8
'''
Created on 2020年6月17日
@author: XXXXXX
'''
import numpy as np
from builtins import eval
fileinput='D:\算法分析与设计/test2_2_input.txt' #输入文件
fileoutput='D:\算法分析与设计/test2_2_output.txt' #输出文件
def RentYacht(stops,data):
update_rent = data.copy()
#1.判断站点数量
if stops == 1:
return 0
elif stops == 2:
return update_rent[0][1] # 直接返回两个站点之间的距离
else:
for d in range(2,stops): # 将问题分解为n-2个子问题
for i in range(stops-d):
j = i+d
for k in range(i+1,j): # 每个子问题的最优结果
temp = update_rent[i][k] + update_rent[k][j]
if temp<update_rent[i][j]:
update_rent[i][j] = temp
return update_rent
if __name__ == "__main__":
#从文件读入数据
with open(fileinput) as file_object:
mater=file_object.read()
mater=mater.split('\n') #分割字符串
mater[0]=mater[0].split() #分割
n=eval(mater[0][0]) #获取站的个数
data=np.zeros([n-1,n],dtype=np.int); #生成全0矩阵
for i in range(1,n): #初始化矩阵
k=i;
mater[i]=mater[i].split()
for j in range(0,n-i):
data[i-1][k]=eval(mater[i][j])
k=k+1
data=RentYacht(n,data)
print("从0站点到n站点,费用的最少租金为:{}".format(data[0][-1]))
file=open(fileoutput,"w") #写入文件
file.write(str(data[0][-1]))
file.close()
本文作者:发呆鱼
本文链接:https://www.cnblogs.com/dyiblog/articles/15929749.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步