题意:

一共有m个城市,城市之间有双向路连接,一个人有n张马车票,一张马车票只能走一条路,走一条路的时间为这条路的长度除以使用的马车票上规定的马车数,问这个人从a出发到b最少使用时间。

分析:

状态压缩dp,用dp[i][j]表示到达j城市的最小时间,其中i为剩余车票的集合。集合i使用状态压缩的表示方法。由于剩余车票的集合不断变小,实际上为求DAG最短路问题。

代码:

#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
int n, m, p, a, b;
const int maxn =1<<10, maxm = 35, INF = 0x3fffffff;
double dp[maxn][maxm];
int dist[maxm][maxm], t[maxm];
int main (void)
{
while(~scanf("%d%d%d%d%d",&n,&m,&p,&a,&b)&&n+m+p+a+b!=0){
for(int i = 0; i < n; i++) scanf("%d",&t[i]);
int x, y, z;
memset(dist,-1,sizeof(dist));
for(int i = 0; i < 1<< n; i++){
fill(dp[i]+1, dp[i] + m+1, INF);
}
dp[(1<<n)-1][a] = 0;
for(int i = 0; i < p; i++){
scanf("%d%d%d",&x,&y,&z);
dist[x][y] = z;
dist[y][x] = z;
} for(int s = (1<<n) - 2; s >=0; s--){
res = min(res, dp[s][b]);
for(int j = 1; j <= m; j++ ){
for(int i = 0; i < n; i++){
if(!(s&1<<i)){
for(int k = 1; k <= m; k++){
if(dist[k][j]>=0){
dp[s][j] = min(dp[s][j], dp[s|(1<<i)][k] + (double)dist[k][j]/t[i]);
}
}
}
}
}
}
double res = INF;
for(int s = (1<<n) - 1; s >=0; s--)
if(res==INF) printf("Impossible\n");
else printf("%.6f\n",res);
}
return 0;
}

POJ 2686_Traveling by Stagecoach【状态压缩DP】的更多相关文章

  1. POJ 3691 (AC自动机+状态压缩DP)

    题目链接:  http://poj.org/problem?id=3691 题目大意:给定N个致病DNA片段以及一个最终DNA片段.问最终DNA片段最少修改多少个字符,使得不包含任一致病DNA. 解题 ...

  2. POJ 1321 棋盘问题(状态压缩DP)

    不总结的话, 同一个地方会 WA 到死 思路: 状态压缩 DP. 1. s 表示压缩状态, 若第 i 列放了棋子, 那么该列置 1, 否则该列置 0. 假如 s = 3(0x011) 那么表示棋盘的第 ...

  3. POJ 3254 Corn Fields(状态压缩DP)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4739   Accepted: 2506 Descr ...

  4. POJ 3254 Corn Fields (状态压缩DP)

    题意:在由方格组成的矩形里面种草,相邻方格不能都种草,有障碍的地方不能种草,问有多少种种草方案(不种也算一种方案). 分析:方格边长范围只有12,用状态压缩dp好解决. 预处理:每一行的障碍用一个状态 ...

  5. POJ2686 Traveling by Stagecoach 状态压缩DP

    POJ2686 比较简单的 状态压缩DP 注意DP方程转移时,新的状态必然数值上小于当前状态,故最外层循环为状态从大到小即可. #include <cstdio> #include < ...

  6. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  7. POJ 3254 Corn Fields 状态压缩DP (C++/Java)

    id=3254">http://poj.org/problem? id=3254 题目大意: 一个农民有n行m列的地方,每一个格子用1代表能够种草地,而0不能够.放牛仅仅能在有草地的. ...

  8. POJ 3254 Corn Fields状态压缩DP

    下面有别人的题解报告,并且不止这一个状态压缩题的哦···· http://blog.csdn.net/accry/article/details/6607703 下面是我的代码,代码很挫,绝对有很大的 ...

  9. poj - 3254 Corn Fields (状态压缩dp入门)

    http://poj.org/problem?id=3254 参考:http://blog.csdn.net/accry/article/details/6607703 农夫想在m*n的土地上种玉米, ...

  10. poj 2686 Traveling by Stagecoach ---状态压缩DP

    题意:给出一个简单带权无向图和起止点,以及若干张马车车票,每张车票可以雇到相应数量的马. 点 u, v 间有边时,从 u 到 v 或从 v 到 u 必须用且仅用一张车票,花费的时间为 w(u, v) ...

随机推荐

  1. [BZOJ1085][SCOI2005]骑士精神 搜索

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1085 大的思路是迭代加深搜索,我们加一个明显的剪枝,当棋盘中位置不对的骑士的数目加上已经走 ...

  2. 微信小程序组件解读和分析:十二、picker滚动选择器

    picker滚动选择器组件说明: picker: 滚动选择器,现支持三种选择器,通过mode属性来区分, 分别是普通选择器(mode = selector),时间选择器(mode = time),日期 ...

  3. vue HTTP请求(针对vue-resource)

    //初始化页面需要做什么事情 //点击后需要做什么事情 //鼠标.键盘.冒泡.默认行为等事件 //前端调用接口就是按需展示数据//created和mounted里面都可以做数据处理,唯一不同的是cre ...

  4. CentOS 6.4 php-fpm 添加service 添加平滑启动/重启

    nginx通过FastCGI运行PHP比Apache包含PHP环境有明显的优势,最近有消息称,PHP5.4将很有可能把PHP-FPM补丁包含在内核里,nginx服务器平台上运行PHP将更加轻松,下面我 ...

  5. maven多模块项目,多web合并项目使用心得

    Fixflow,做中国最好的开源流程引擎!项目地址https://github.com/fixteam/fixflow 此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过 ...

  6. arcpy利用XY创建点

    # -*- coding: utf-8 -*-"""Created on Sun Apr 7 15:32:24 2019@author: ""&quo ...

  7. jquery 微信端 点击物理返回按钮,弹出提示框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. CS2QS

    inline QString MotorCS2QS(CString cs) { return QString::fromWCharArray((LPCTSTR)cs, cs.GetLength()); ...

  9. 06C#类

    C#类 1.2      类的继承 在1.3节,定义了一个描述个人情况的类Person,如果我们需要定义一个雇员类,当然可以从头开始定义雇员类Employee.但这样不能利用Person类中已定义的函 ...

  10. db2事务日志已满解决办法

    查看事务日志配置(MICRO_11为数据库名称): db2 get db cfg for MICRO_11 运行结果: 日志文件大小(4KB)                         (LOG ...