POJ2686

比较简单的 状态压缩DP

注意DP方程转移时,新的状态必然数值上小于当前状态,故最外层循环为状态从大到小即可。

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 1 << 10;
const int maxm = 31;
const int INF = 1 << 29; int n, m, p, a, b;
int t[maxm];
int d[maxm][maxm]; //图的邻接矩阵表示(-1表示没有边) //dp[S][v] := 到达剩下的车票集合为S并且现在在城市v的状态所需要的最小花费
double dp[maxn][maxm]; void solve()
{
for (int i = 0; i < (1 << n); i++)
fill(dp[i], dp[i] + m + 1, INF); //用足够大的值初始化 dp[(1 << n) - 1][a] = 0;
double res = INF;
for (int i = (1 << n) - 1; i >= 0; i--){
for (int u = 1; u <= m; u++){
for (int j = 0; j < n; j++){
if (i & (1 << j)){
for (int v = 1; v <= m; v++){
if (d[v][u]){
//使用车票i,从v移动到u
dp[i & ~(1 << j)][v] = min(dp[i & ~(1 << j)][v], dp[i][u] + (double)d[u][v] / t[j]);
}
}
}
}
}
}
for (int i = 0; i < (1 << n); i++)
res = min(res, dp[i][b]);
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 && !m)
break;
memset(d, 0, sizeof(d));
for (int i = 0; i < n; i++)
scanf("%d", &t[i]);
for (int i = 0; i < p; i++){
int u, v, c;
scanf("%d%d%d", &u, &v, &c);
d[u][v] = d[v][u] = c;
}
solve();
}
return 0;
}

  

POJ2686 Traveling by Stagecoach 状态压缩DP的更多相关文章

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

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

  2. Traveling by Stagecoach 状态压缩裸题

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

  3. POJ2686 Traveling by Stagecoach(状压DP)

    题意: 有一个旅行家计划乘马车旅行.他所在的国家里共有m个城市,在城市之间有若干道路相连.从某个城市沿着某条道路到相邻的城市需要乘坐马车.而乘坐马车需要使用车票,每用一张车票只可以通过一条道路.每张车 ...

  4. POJ 2686_Traveling by Stagecoach【状态压缩DP】

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

  5. 旅行商问题——状态压缩DP

    问题简介 有n个城市,每个城市间均有道路,一个推销员要从某个城市出发,到其余的n-1个城市一次且仅且一次,然后回到再回到出发点.问销售员应如何经过这些城市是他所走的路线最短? 用图论的语言描述就是:给 ...

  6. 状态压缩DP(大佬写的很好,转来看)

    奉上大佬博客 https://blog.csdn.net/accry/article/details/6607703 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的 ...

  7. hoj2662 状态压缩dp

    Pieces Assignment My Tags   (Edit)   Source : zhouguyue   Time limit : 1 sec   Memory limit : 64 M S ...

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

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

  9. [知识点]状态压缩DP

    // 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...

随机推荐

  1. 程序包javax.servlet.http不存在

    在maven test项目时,出现错误: java:[7,26] 程序包javax.servlet.http不存在 原因:pom.xml中未引入javax.servlert-api相关的包 <d ...

  2. Zoj 3781(构造)

    Zoj 3781(构造) Zoj 3781 As we all know, Coach Gao is a talented chef, because he is able to cook M dis ...

  3. [转] angular2-highcharts用法详解

    1. 使用npm安装angular2-highcharts npm install angular2-highcharts --save 2.主模块中引入 app.module.ts import { ...

  4. 【Codeforces 444A】DZY Loves Physics

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 两个点的子图他们的"密度"是比所有联通生成子图都要大的 "只要胆子大,遇到什么问题都不怕!" [代码] ...

  5. 7-16 一元多项式求导(20 分)(有关while(scanf("%d",&n)!=EOF))

    7-16 一元多项式求导(20 分) 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 以与输入相同 ...

  6. android开发里跳过的坑——android studio 错误Error:Execution failed for task ':processDebugManifest'. > Manifest merger failed with multiple errors, see logs

    使用AS在gradle里配置了多个定制版本,发现在编译版本切换时,会出现错误: Error:Execution failed for task ':processDebugManifest'.> ...

  7. msp430入门编程00

    msp430单片机最小系统 msp430入门学习 msp430入门编程

  8. Our Journey of Dalian Ends 乌鲁木齐网络赛 最小费用最大流

    Life is a journey, and the road we travel has twists and turns, which sometimes lead us to unexpecte ...

  9. 006 Cisco switch prewired

    Switch>en Switch#config t Enter configuration commands, one per line.  End with CNTL/Z. Switch(co ...

  10. AutoCAD如何添加网络打印机 添加公司打印机

    1 请确认你已经连接了这台网络打印机,你没法打AutoCAD图纸,但是应该能打Word文档.能打Word文档说明你驱动装好了,通信也没问题,只是AutoCAD的配置不对导致的.   2 点击打印,打印 ...