题目大意:

输入n,m,p,a,b

n是车票数(1<=n<=8),m是城市数(2<=m<=30)

p是路径数(可能为0),a是起点,b是终点

接下来一行有n个数 为每张车票的马匹数

接下来p行有u,v,w为城市u到城市v路径长度为w

时间计算为 路径长度/车票马匹数

求a到b的最短用时,不可能则输出 Impossible

最后一行以5个0结束

Sample Input

3 4 3 1 4
3 1 2
1 2 10
2 3 30
3 4 20
2 4 4 2 1
3 1
2 3 3
1 3 3
4 1 2
4 2 5
2 4 3 4 1
5 5
1 2 10
2 3 10
3 4 10
1 2 0 1 2
1
8 5 10 1 5
2 7 1 8 4 5 6 3
1 2 5
2 3 4
3 4 7
4 5 3
1 3 25
2 4 23
3 5 22
1 4 45
2 5 51
1 5 99
0 0 0 0 0

Sample Output

30.000
3.667
Impossible
Impossible
2.856

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define N 8
using namespace std;
int n,m,p,a,b;
int t[N],G[][];
double dp[<<N][];
void solve()
{
int st=(<<n)-; /// 注意 1<<n 需要打括号 -比<<优先级高
for(int i=0;i<=st;i++) /// double型 不能用memset初始化
fill(dp[i],dp[i]+m,INF); dp[st][a-]=; // 初始状态 车票都在且位于a点 1为还没用 0为已用
double ans=INF;
for(int p=st;p>=;p--){ // 枚举所有车票状态
ans=min(ans,dp[p][b-]); // 更新到达b点的最少时间
for(int i=;i<m;i++) { // 枚举所在点
if(dp[p][i]==INF) continue;
/// 若车票状态为p且位于i点的dp值为INF
/// 说明当前还未能更新出该情况 则忽略
for(int k=;k<n;k++) // 枚举接下来要使用的车票
if((<<k)&p) { /// 若车票状态p中 还没用过k车票
for(int j=;j<m;j++) { // 枚举使用k车票要去的点
if(G[i+][j+]==INF) continue; // 没有路则忽略
double tmp=(double)G[i+][j+]/t[k]; /// 该路使用k车票需要的时间
dp[p&~(<<k)][j]=min(dp[p&~(<<k)][j],dp[p][i]+tmp);
/// 通过p状态位于j点花费tmp dp[p][i]+tmp
/// 延伸到k车票已用位于i点的状态 dp[p&~(1<<k)][j]
}
}
}
}
// for(int s=0;s<=(1<<n)-1;s++) {
// for(int i=1;i<=m;i++)
// if(dp[s][i]==INF) printf("-1 ");
// else printf("%.3f ",dp[s][i]);
// printf("\n");
// }
if(ans==INF) printf("Impossible\n");
else printf("%.3f\n",ans);
}
int main()
{
while(~scanf("%d%d%d%d%d",&n,&m,&p,&a,&b)) {
for(int i=;i<n;i++) scanf("%d",&t[i]);
if(n+m+p+a+b==) break;
if(p== || n==) { // 没有路或没有车票
printf("Impossible\n");
continue;
}
if(a==b) { // 起点终点为同一点
printf("0\n");
continue;
}
memset(G,INF,sizeof(G));
while(p--) {
int u,v,w; scanf("%d%d%d",&u,&v,&w);
G[u][v]=G[v][u]=min(G[u][v],w);
}
solve();
} return ;
}

Traveling by Stagecoach /// 状压DP oj22914的更多相关文章

  1. POJ 2686 Traveling by Stagecoach (状压DP)

    题意:有一个人从某个城市要到另一个城市, 有n个马车票,相邻的两个城市走的话要消耗掉一个马车票.花费的时间呢,是马车票上有个速率值 ,问最后这个人花费的最短时间是多少. 析:和TSP问题差不多,dp[ ...

  2. POJ 2686 Traveling by Stagecoach 壮压DP

    大意是有一个人从某个城市要到另一个城市(点数<=30) 然后有n个马车票,相邻的两个城市走的话要消耗掉一个马车票. 花费的时间呢,是马车票上有个速率值,用边/速率就是花的时间. 问最后这个人花费 ...

  3. 【状压DP】poj2686 Traveling by Stagecoach

    状压DP裸题,将({当前车票集合},当前顶点)这样一个二元组当成状态,然后 边权/马匹 当成边长,跑最短路或者DAG上的DP即可. #include<cstdio> #include< ...

  4. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  5. codeforces 21D. Traveling Graph 状压dp

    题目链接 题目大意: 给一个无向图, n个点m条边, 每条边有权值, 问你从1出发, 每条边至少走一次, 最终回到点1. 所走的距离最短是多少. 如果这个图是一个欧拉回路, 即所有点的度数为偶数. 那 ...

  6. TSP问题之状压dp法

    首先,我们先来认识一下什么叫做TSP问题 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人 ...

  7. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  8. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  9. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

随机推荐

  1. 【代码工具】Lombok来优雅的编码

    前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的. 正文 添加依赖 在 pom.xml ...

  2. Java-Class-@I:org.junit.runner.RunWith

    ylbtech-Java-Class-@I:org.junit.runner.RunWith 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部 1. package org.juni ...

  3. LeetCode 1019. Next Greater Node In Linked List (链表中的下一个更大节点)

    题目标签:Linked List, Stack 题目给了我们一个 Linked List,让我们找出对于每一个数字,它的下一个更大的数字. 首先把 Linked List 里的数字 存入 ArrayL ...

  4. scrapy-redis + Bloom Filter分布式爬取tencent社招信息

    scrapy-redis + Bloom Filter分布式爬取tencent社招信息 什么是scrapy-redis 什么是 Bloom Filter 为什么需要使用scrapy-redis + B ...

  5. Hadoop国内主要发行版本

    Hadoop主要版本 目前国内使用的不收费的Hadoop版本主要包括以下3个: Apache hadoop Cloudera的CDH Hortonworks版本(Hortonworks Data Pl ...

  6. 4、postman的常见断言

    推荐我的另一篇文章  浅谈JSONObject解析JSON数据,这篇文章原理类似,使用java或者beanshell进行断言解析json数据 介绍断言之前,我们先测试1个接口: 接口地址:https: ...

  7. ashx后门[转]

    https://www.cnblogs.com/Fluorescence-tjy/p/9855828.html 一.标准ASPX一句话木马 .NET平台下的一句话木马则百年不变,最常见的当属下面这句 ...

  8. 常用sign算法

    所有参数包括appkey或者token拼接成&key=value格式 转小写 正序排序 MD5后得到sign

  9. IntelliJ IDEA创建springboot项目

    1.创建新项目. 2. 3.Group 是包名,Artifact是项目名. 4.springboot版本尽量选择最高版本,且不要选择SNAPSHOP版本. 5.路径可自定义,默认为D://IDEA/M ...

  10. 16-MySQL-Ubuntu-数据表的查询-分组与聚合(五)

    分组(group by)一般与聚合结合使用 (1)查询按性别分组 select gender from students group by gender; (2)查询按性别分组并统计每组的数量sele ...