Travelling by Stagecoach(POJ No.2686)

有一个旅行家计划乘马旅行。他所在的国家共m个城市,在城市之间有若干道路相连。从某个城市沿着某条路到相邻的城市需要乘马。而乘马需要使用车票,每用一张车票只能通过一条道路。每张车票有马的匹数,从一个城市到另一个城市所需的时间等于城市之间的道路除以马的数量的结果,这位旅行家共有n张车票,第i张车票上的马的匹数是ti。一张车票只能使用一次,并且换乘所需时间忽略。求从城市a到城市b所需的最短时间。如果无法到达b则输出“Impossible”。


本题的思路与TSP相同
TSP:https://blog.csdn.net/qq_45769877/article/details/104336842

设dp[v][S]:表示在顶点v时,剩余的车票集合为S,到达终点的最短时间

在初始值上有所改变
dp[v][∅]=无穷 v≠终点
dp[v][∅]=0 v=终点

递归表达式
状态转移,是车票的递减

示例:

dp数组


直接上代码

#include<iostream>
#include<stdlib.h>
#include<algorithm>
#define MAX_N 100
#define INF 1000
using namespace std;int n = 4, m = 2, a = 1, b = 0;
double t[MAX_N] = { 1,3 };
double d[4][4] = { {0,INF,3,2},{INF,0,3,5},{3,3,0,INF},{2,5,INF,0} };
double dp[MAX_N][MAX_N];void DP() {//当车票剩余为0时,若v为终点则值为0,在其他点时则不可能到达终点,值为INFfor (int i = 0; i < n; i++) {if (i == b) dp[i][0] = 0;else dp[i][0] = INF;}//以列为准,进行跟新for (int S = 1; S < 1 << m; S++) {for (int i = 0; i < n; i++) {//当v刚好为终点时,则其值为0if (i == b) dp[i][S] = 0;else {//对其他点进行计算dp[i][S] = INF;for (int j = 0; j < n; j++) {//对当前点v相邻的点,进行筛选if (d[i][j] != INF) {//对车票进行筛选for (int k = 0; k < m; k++) {if (((S >> k) & 1) == 1) {dp[i][S] = min(dp[i][S], dp[j][S ^ (1 << k)] + d[i][j] / t[k]);}}}}}}}
}
int main() {DP();//这里直接打印了dp数组for (int i = 0; i < n; i++) {for (int j = 0; j < (1 << m); j++)if (dp[i][j] == INF) cout << "INF\t";else cout << dp[i][j]<<"\t";cout << endl;}system("pause");
}

Travelling by Stagecoach相关推荐

  1. PAT甲级1150 Travelling Salesman Problem:[C++题解]旅行商问题、图论

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 旅行商问题:访问每个城市并回到原城市的最短路. 思路: 1)判断相邻两点有无距离(NA):2)每个点是否都能到:3)是否是回路:4) ...

  2. JavaScript实现Travelling Salesman算法(附完整源码)

    JavaScript实现Travelling Salesman算法(附完整源码) bfTravellingSalesman.js完整源代码 bfTravellingSalesman.js完整源代码 f ...

  3. CF1009E Intercity Travelling

    CF1009E Intercity Travelling 题意: 有一段路程,路程可以看作是从0到n的一条直线 如果从起点出发或者从休息点出发,连续驾驶k千米,则需要消耗的体能为a1+-+ak 每个整 ...

  4. cf1504. Travelling Salesman Problem

    cf1504. Travelling Salesman Problem 题意: n个城市,编号1~n,每个城市有美丽值a[i],现在要从城市1出发,其他所有城市走一遍,最后回到城市1,城市i到j的花费 ...

  5. PAT 1150 Travelling Salesman Problem(25 分)- 甲级

    The "travelling salesman problem" asks the following question: "Given a list of citie ...

  6. bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(BFS)

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1293  Solved ...

  7. BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛【DP】

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec Memory Limit: 64 MB Description 奶牛们在被划分成N ...

  8. BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 bfs

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1290  Solved ...

  9. 【bzoj 1616】: [Usaco2008 Mar]Cow Travelling游荡的奶牛 dp

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1616 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Tim ...

  10. bzoj1616[Usaco2008 Mar]Cow Travelling游荡的奶牛*

    bzoj1616[Usaco2008 Mar]Cow Travelling游荡的奶牛 题意: n行m列的草地上有一些位置有障碍物.第0时刻奶牛在(r1,c1),第t时刻奶牛在(r2,c2)(注意这里都 ...

最新文章

  1. Windows 活动目录(AD)服务器系统升级到2012之活动目录角色迁移(三)
  2. 路由表中没有与提供的值匹配的路由
  3. python学习日记day2
  4. 畅享云游戏,AWS云峰会邀你零距离体验强化学习!
  5. git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚
  6. laravel数据库相关操作说明
  7. 关于vue外卖项目的一些总结
  8. python异步调用_python如何实现异步调用函数执行
  9. jquery-pager的使用
  10. windows 与linux实现文件共享
  11. (box-shadow)阴影 -CSS3 注:外阴影
  12. python怎么模拟鼠标移动点击_如何使用python来模拟鼠标点击?
  13. 手把手教大家搭建微信公众号查题
  14. 初识c语言思维导图及大纲 (内含思维导图图片及pdf版下载链接)
  15. 自己封装的element-ui的table插件,实现render渲染,插槽等功能
  16. 详解 PerformanceResourceTiming API,咦,这货真的干!
  17. oracle存储过程中游标定义
  18. vscode国内下载
  19. 西南科技大学数据库实验二(Oracle 11g)
  20. 网络营销实战课-笔记4

热门文章

  1. 微信公众号测试号配置 适用于登录注册
  2. 流媒体录播服务器系统,EasyDarwin开源流媒体云平台之EasyRMS录播服务器功能设计...
  3. 技术文章 | iOS 防 DNS 污染方案调研--- HTTPS(非SNI) 业务场景
  4. flac怎么转为mp3?
  5. 高端大气的个人资料简介页源码
  6. .NET 命名空间详细介绍
  7. 部署项目中Nginx遇到的错误
  8. 国庆三亚自由行(Part 3 第三日之游泳按摩)
  9. 区块链行业年度盘点 | 2017急速前进,2018再出发
  10. 自媒体热点工具有哪些?媒体运营人员必备