题意:给出一个简单带权无向图和起止点,以及若干张马车车票,每张车票可以雇到相应数量的马。

点 u, v 间有边时,从 u 到 v 或从 v 到 u 必须用且仅用一张车票,花费的时间为 w(u, v) / ticket[i],


其中 w(u, v) 表示边的权值,ticket[i] 表示第 i 张车票可以雇到的马匹数。求从起点到终点花费的最小时间。

如果不能到达终点,输出“Impossible”。(点数 <= 30,票数 <= 8)*/

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

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const double INF=10000000000.0;
const int MAX_N=8;
const int MAX_M=30;
double weight[MAX_M][MAX_M];
double ticket[MAX_N];
int n,m,p,a,b;
double dp[1<<MAX_N][MAX_M];
void solve(){
for(int i=0;i< 1<<n; i++){
fill(dp[i],dp[i]+m,INF);
}
dp[0][a-1]=0; // 状态 dp[i][j]:= 使用车票为 i 到达城市 j 所需要的最小花费
for(int i=0;i< 1<<n;i++){
for(int j=0;j<n;j++){
if(i&(1<<j)) continue; //第j张车票已经使用
for(int k=0;k<m;k++){
for(int v=0;v<m;v++){
if(weight[k][v]>=0){ // 使用车票i 从 k 移动到 v
dp[i|(1<<j)][v]=min(dp[i|(1<<j)][v],dp[i][k]+weight[k][v]/ticket[j]);
}
}
}
}
}
double res=INF;
for(int i=0;i< 1<<n;i++) res=min(res,dp[i][b-1]);
if(res==INF) cout<<"Impossible"<<endl;
else printf("%.3lf\n",res);
}
int main(){
while(cin>>n>>m>>p>>a>>b){
if(n+m+p+a+b==0)break;
for(int i=0;i<n;i++) cin>>ticket[i];
memset(weight,-1,sizeof(weight)); // -1表示没有边
for(int i=0;i<p;i++){
int x,y,z;
cin>>x>>y>>z;
x--;y--;
weight[x][y]=z;
weight[y][x]=z;
}
solve();
}
return 0;
}

poj 2686 Traveling by Stagecoach ---状态压缩DP的更多相关文章

  1. POJ2686 Traveling by Stagecoach 状态压缩DP

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

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

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

  3. POJ 2686 Traveling by Stagecoach 壮压DP

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

  4. POJ 1691 Painting a Board(状态压缩DP)

    Description The CE digital company has built an Automatic Painting Machine (APM) to paint a flat boa ...

  5. poj 3311 floyd+dfs或状态压缩dp 两种方法

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6436   Accepted: 3470 ...

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

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

  7. Traveling by Stagecoach 状态压缩裸题

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

  8. poj 2411 Mondriaan's Dream_状态压缩dp

    题意:给我们1*2的骨牌,问我们一个n*m的棋盘有多少种放满的方案. 思路: 状态压缩不懂看,http://blog.csdn.net/neng18/article/details/18425765 ...

  9. poj 1185 炮兵阵地 [经典状态压缩DP]

    题意:略. 思路:由于每个大炮射程为2,所以如果对每一行状态压缩的话,能对它造成影响的就是上面的两行. 这里用dp[row][state1][state2]表示第row行状态为state2,第row- ...

随机推荐

  1. 这是一个hibernate 联合主键的例子

    package com.bird.entity; import java.io.Serializable; import javax.persistence.Entity; import javax. ...

  2. poj 1907 Work Reduction_贪心

    题意:公司要你要完成N份任务,但是你是不可能全部完成的,所以需要雇佣别人来做,做到剩下M份时,自己再亲自出马.现在有个机构,有两种付费方式,第一种是每付A元帮你完成1份,第二种是每付B元帮你完成剩下任 ...

  3. HDOJ 4417 - Super Mario 线段树or树状数组离线处理..

    题意: 同上 题解: 抓着这题作死的搞~~是因为今天练习赛的一道题.SPOJ KQUERY.直到我用最后一种树状数组通过了HDOJ这题后..交SPOJ的才没超时..看排名...时间能排到11名了..有 ...

  4. 安装android studio时,解决unable to access android sdk add-on list

    1.打开时提示如下错误. 2.在安装路径下找到idea.properties文件,用记事本打开,添加disable.android.first.run=true,保存即可. 3.再次打开Android ...

  5. JS正则表达式大全【转】

    正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...

  6. Server(Iocp)的那些烦恼

    自G-Socket0.88版开源以来,得到很多朋友的支持.从1.0版本至2.0之前,内核几乎没有改变,经过多处的应用其稳定性和效率表现是相当不错的.这几年的经验总结成一句话:服务器程序不是有了一个好的 ...

  7. GrideView合并列合并序号,隐藏某列按钮

    合并编号列 /// <summary> /// 合并GridView中某列相同信息的行(单元格) /// </summary> /// <param name=" ...

  8. HTML构成及基本标签

    超文本标记语言:HTML W3C:互联网联盟 注释语法:<!--注释掉的内容--> 标签格式: 双标签元素:<标签名 属性 style="样式">内容< ...

  9. OC——NSString的常用方法

    NSString *str1 = @"BeiJing"; NSString *str2 = @"beijing"; //全部转为大写 NSLog(@" ...

  10. 20160126--springaop

    package com.hanqi; public interface IJiSuanQi { public int jia(int a , int b); public int jian(int a ...