算法分析与设计实验-游艇租用问题

游艇租用问题

问题描述

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

编程任务

对于给定的游艇出租站i到游艇出租站j之间的租金为r(i,j),1i<jn,编程计算从游艇出租站1到游艇出租站n所需的最少租金。

数据输入

由文件input.txt提供输入数据。文件的第1行中有1个正整数n(n<=200),表示有n个游艇出租站。接下来的n-1行是r(i,j),1i<jn。

实验设计

此算法以租站位置作为下标值,可得出动态规划方程:
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()
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丁拾陆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值