状压DP

dp[s][p]用了哪几张票,到哪个节点的最小费用。

注意:G++ %.3lf输出会WA,但C++能过;改成%.3f,C++,G++都能AC

#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
#include<algorithm>
using namespace std; const double INF = ;
int n, m, p, a, b;
int t[];
struct Edge
{
int to;
int dis;
}e[];
int tot;
vector<int>g[];
double dp[][]; int main()
{
while (~scanf("%d%d%d%d%d", &n, &m, &p, &a, &b))
{
if (n == && m == && p == && a == && b == ) break; tot = ;
for (int i = ; i <= m; i++) g[i].clear();
for (int i = ; i < ( << n); i++)
for (int j = ; j <= m; j++) dp[i][j] = INF; for (int i = ; i < n; i++) scanf("%d", &t[i]);
for (int i = ; i <= p; i++)
{
int u, v, c; scanf("%d%d%d", &u, &v, &c);
e[++tot].to = v; e[tot].dis = c; g[u].push_back(tot);
e[++tot].to = u; e[tot].dis = c; g[v].push_back(tot);
} dp[][a] = ;
for (int i = ; i < ( << n); i++)
{
for (int j = ; j <= m; j++)
{
if (dp[i][j] == INF) continue;
for (int k = ; k < n; k++)
{
if ((i | ( << k)) == i) continue;
for (int s = ; s < g[j].size(); s++)
{
dp[(i | ( << k))][e[g[j][s]].to] = min(
dp[(i | ( << k))][e[g[j][s]].to],
dp[i][j] + 1.0*e[g[j][s]].dis / (1.0*t[k]));
}
}
}
} double ans = INF;
for (int i = ; i < ( << n); i++)
ans = min(ans, dp[i][b]);
if (ans == INF) printf("Impossible\n");
else printf("%.3f\n", ans);
}
return ;
}

POJ 2686 Traveling by Stagecoach的更多相关文章

  1. POJ 2686 Traveling by Stagecoach(状压二维SPFA)

    Traveling by Stagecoach Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3407   Accepted ...

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

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

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

    [题目链接] http://poj.org/problem?id=2686 [题目大意] 给出一张无向图,你有n张马车票每张车票可以租用ti匹马, 用一张马车票从一个城市到另一个城市所用的时间为这两个 ...

  4. POJ 2686 Traveling by Stagecoach 壮压DP

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

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

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

  6. poj2686 Traveling by Stagecoach

                    http://poj.org/problem?id=2686                                                  Trav ...

  7. Traveling by Stagecoach(POJ 2686)

    原题如下: Traveling by Stagecoach Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4494   Ac ...

  8. Traveling by Stagecoach 状态压缩裸题

    Traveling by Stagecoach dp[s][v]  从源点到达  v,状态为s,v的最小值.  for循环枚举就行了. #include <iostream> #inclu ...

  9. POJ2686 Traveling by Stagecoach(状压DP+SPFA)

    题目大概是给一张有向图,有n张票,每张票只能使用一次,使用一张票就能用pi匹马拉着走过图上的一条边,走过去花的时间是边权/pi,问从a点走到b点的最少时间是多少. 用dp[u][S]表示当前在u点且用 ...

随机推荐

  1. Object调用控件的办法

    <OBJECT id="pwdpad" style="LEFT: 0px; WIDTH: 35px; TOP: 0px; HEIGHT: 16px" cl ...

  2. Lua 迭代器

    第一种:lua迭代器的实现依赖于闭包(closure)特性 1.1 第一个简单的写法 --迭代器写法 function self_iter( t ) local i = 0 return functi ...

  3. java解析xml文件并输出

    使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...

  4. iOS UIScrollView偏移量属性

    contentSize: The size of the content view. 其实就是scrollview可以滚动的区域,比如frame = (0 ,0 ,320 ,480) contentS ...

  5. linux视频学习3(linux安装,shell,tcp/ip协议,网络配置)

    linux系统的安装: 1.linux系统的安装方式三种: 1.独立安装linux系统. 2.虚拟机安装linux系统. a.安装虚拟机,基本是一路点下去. b.安装linux. c.linux 安装 ...

  6. C++builder编译别人工程报错

    编译时遇到错误,信息如下: [C++ Error] NVRAMEditor.h(83): E2209 Unable to open include file 'CONTROLSLib_OCX.h'[C ...

  7. UIImage 和 UIImageView区别

    // // ViewController.m // 06-UIImage 和 UIImageView // // Created by Stephen on 16/4/18. // Copyright ...

  8. Python -- OOP高级 -- 定制类

    __str__ 和 __repr__ :实例对象直接显示字符串 class Student: def __init__(self, name): self.name = name def __str_ ...

  9. 转:Selenium2.0之grid学习总结

    (一)介绍: Grid的功能: 并行执行 通过一个中央管理器统一控制用例在不同环境.不同浏览器下运行 灵活添加变动测试机 (二)快速开始 这个例子将介绍如何使用selenium2.0的grid,并且注 ...

  10. USB的八个问题和答案(转)

    http://www.amobbs.com/thread-901041-1-1.html 问题一:USB的传输线结构是如何的呢? 答案一:一条USB的传输线分别由地线.电源线.D+.D-四条线构成,D ...