博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ2686 Traveling by Stagecoach(状压DP)
阅读量:5038 次
发布时间:2019-06-12

本文共 1469 字,大约阅读时间需要 4 分钟。

m个城市 n张车票 一个车票用一次 两条路径之间需要走长度除车票上马车数 求城市a到城市b的最快时间 不能到达就输出Impossible

dp[s][v] 现在在城市v, 剩下车票的集合为s。

《挑战程序设计》P195

#include 
#include
#include
using namespace std;const int INF = 0x5f5f5f5f;const int M = 30; // citiesconst int N = 8; // ticketsint n, m, p, a, b;int t[N];int d[M][M];double dp[1 << N][M]; // dp[s][v] S:tickets, v:cityvoid solve(){ for (int i = 0; i < (1 << n); ++i) fill(dp[i], dp[i] + m, INF); dp[(1 << n) - 1][a - 1] = 0; double res = INF; for (int s = (1 << n) - 1; s >= 0; --s) { res = min(res, dp[s][b - 1]); for (int v = 0; v < m; ++v) { // 选择一个城市出发 for (int i = 0; i < n; ++i) { // 选择一张车票 if ((s >> i) & 1) { // 如果车票在S中,即还没有使用 for (int u = 0; u < m; ++u) { // 选择一个城市到达 if (d[v][u] >= 0) { // 如果v,u之间有路径,s中减去车票i来到达u dp[s & ~(1 << i)][u] = min(dp[s & ~(1 << i)][u], dp[s][v] + (double)d[v][u] / t[i]); } } } } } } if (res == INF) printf("Impossible\n"); else printf("%.3f\n", res);}int main(){ while (scanf("%d%d%d%d%d", &n, &m, &p, &a, &b) != EOF) { if (n == 0 && m == 0 && p == 0 && a == 0 && b == 0) break; for (int i = 0; i < n; ++i) scanf("%d", t + i); for (int i = 0; i < m; ++i) for (int j = 0; j < m; ++j) d[i][j] = -1; int x, y, z; for (int i = 0; i < p; ++i) { scanf("%d%d%d", &x, &y, &z); d[y - 1][x - 1] = d[x - 1][y - 1] = z; } solve(); } return 0;}

  

转载于:https://www.cnblogs.com/wenruo/p/4752221.html

你可能感兴趣的文章
String中各方法多数情况下返回新的String对象
查看>>
浅谈tcp粘包问题
查看>>
UVA11524构造系数数组+高斯消元解异或方程组
查看>>
排序系列之——冒泡排序、插入排序、选择排序
查看>>
爬虫基础
查看>>
jquery.lazyload延迟加载图片第一屏问题
查看>>
HDU 1011 Starship Troopers (树形DP)
查看>>
手把手教你写DI_1_DI框架有什么?
查看>>
.net常见的一些面试题
查看>>
OGRE 源码编译方法
查看>>
上周热点回顾(10.20-10.26)
查看>>
C#正则表达式引发的CPU跑高问题以及解决方法
查看>>
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了...
查看>>
APScheduler调度器
查看>>
设计模式——原型模式
查看>>
【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.1.CSS框架和其他功能
查看>>
如何一个pdf文件拆分为若干个pdf文件
查看>>
web.xml中listener、 filter、servlet 加载顺序及其详解
查看>>
前端chrome浏览器调试总结
查看>>
获取手机验证码修改
查看>>