动态规划之游艇租赁(2021/2/1)

47 篇文章 4 订阅
16 篇文章 3 订阅

问题引入

游艇租赁规则
在这里插入图片描述
游艇租赁价格表
在这里插入图片描述
代码实现

#include<iostream>
#include<cstdlib>
using namespace std;
#define N 1000
int price_map[N][N];//价格表
int real_price[N][N];//最优价格
int strategy[N][N];//策略选择
//打印解决方案 
void print(int i,int j){
	if(strategy[i][j]==0){
		cout<<"--"<<j;//i-->j 不同停靠则直接到j
		return; 
	}
	print(i,strategy[i][j]);
	print(strategy[i][j],j);
} 
void solve(int&n,int&start,int&end){//共有n个站点 
	for(int step=3;step<=n;step++){//将问题分解为大小为d的小问题 
		//解决全部小问题
		for(int i=1;i<=n-step+1;i++){//问题的起点
			int j=i+step-1;//问题终点 
			//试探全部停靠站
			for(int k=i+1;k<j;k++){
				int trial=real_price[i][k]+real_price[k][j];
				if(trial<real_price[i][j]){//中间停靠比较省钱 
					real_price[i][j]=trial;
					strategy[i][j]=k;//记录从 i到 j的中间停靠点 
				} 
			}
		} 
	}
	//打印解决方案
	cout<<start;
	print(start,end); 
	cout<<"\n花费:  "<<real_price[start][end]<<endl;
}
int main(int argc,char**argv){
	cout<<"输入站点个数\n";
	int number_of_sites=0;
	cin>>number_of_sites;
	//输入价格表
	cout<<"输入价格表\n";
	for(int i=1;i<=number_of_sites;i++){
		for(int j=i+1;j<=number_of_sites;j++){
			cin>>price_map[i][j];
			//初始化real_price为price_map
			real_price[i][j]=price_map[i][j]; 
		}
	}
	cout<<"寻找解决方案中...\n"; 
	int start=1,end=6;
	solve(number_of_sites,start,end);
	return 0;
}

程序样例

输入站点个数
6
输入价格表
2
6
9
15
20
3
5
11
18
3
6
12
5
8
6
寻找解决方案中...
1--2--4--6
花费:  15

--------------------------------
Process exited after 22.67 seconds with return value 0
请按任意键继续. . .
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

高万禄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值