POJ 2686_Traveling by Stagecoach【状态压缩DP】
题意:
一共有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】的更多相关文章
- POJ 3691 (AC自动机+状态压缩DP)
题目链接: http://poj.org/problem?id=3691 题目大意:给定N个致病DNA片段以及一个最终DNA片段.问最终DNA片段最少修改多少个字符,使得不包含任一致病DNA. 解题 ...
- POJ 1321 棋盘问题(状态压缩DP)
不总结的话, 同一个地方会 WA 到死 思路: 状态压缩 DP. 1. s 表示压缩状态, 若第 i 列放了棋子, 那么该列置 1, 否则该列置 0. 假如 s = 3(0x011) 那么表示棋盘的第 ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- POJ 3254 Corn Fields (状态压缩DP)
题意:在由方格组成的矩形里面种草,相邻方格不能都种草,有障碍的地方不能种草,问有多少种种草方案(不种也算一种方案). 分析:方格边长范围只有12,用状态压缩dp好解决. 预处理:每一行的障碍用一个状态 ...
- POJ2686 Traveling by Stagecoach 状态压缩DP
POJ2686 比较简单的 状态压缩DP 注意DP方程转移时,新的状态必然数值上小于当前状态,故最外层循环为状态从大到小即可. #include <cstdio> #include < ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
- POJ 3254 Corn Fields 状态压缩DP (C++/Java)
id=3254">http://poj.org/problem? id=3254 题目大意: 一个农民有n行m列的地方,每一个格子用1代表能够种草地,而0不能够.放牛仅仅能在有草地的. ...
- POJ 3254 Corn Fields状态压缩DP
下面有别人的题解报告,并且不止这一个状态压缩题的哦···· http://blog.csdn.net/accry/article/details/6607703 下面是我的代码,代码很挫,绝对有很大的 ...
- poj - 3254 Corn Fields (状态压缩dp入门)
http://poj.org/problem?id=3254 参考:http://blog.csdn.net/accry/article/details/6607703 农夫想在m*n的土地上种玉米, ...
- poj 2686 Traveling by Stagecoach ---状态压缩DP
题意:给出一个简单带权无向图和起止点,以及若干张马车车票,每张车票可以雇到相应数量的马. 点 u, v 间有边时,从 u 到 v 或从 v 到 u 必须用且仅用一张车票,花费的时间为 w(u, v) ...
随机推荐
- ASP.Net 控件
简单控件 Label -作用是显示文字,编译后元素是Span 1.文本类 边框: BorderColor 边框颜色 BordersTyle 边框样式 BorderWidth 边框粗细 Literal- ...
- AJPFX讲解java单例模式
单例设计模式概述: 单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3 ...
- 第一次阅读作业 xinzcover
---恢复内容开始--- 第一次阅读和准备作业 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作 ...
- SQL——时间戳
mysql 低版本,date.datetime.timestamp 无法精确到毫秒 可以舍弃时间类型字段,用 bigint 来代替,如果用字符串类型代替,还是比较担心排序的时候只是根据第一个字母进行排 ...
- mvc框架 与vuex的介绍
应用级的状态集中放在store中: 改变状态的方式是提交mutations,这是个同步的事物: 异步逻辑应该封装在action中. const vuex_store = new Vuex.store( ...
- js 复制文字、 复制链接到粘贴板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- windows SDK创建一个窗体
#include <windows.h> /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, U ...
- javascript——js string 转 int 注意的问题——parseInt(转)
<script> var str='1250' ; alert( Number(str) ); //得到1250 alert(parseInt(str)); //得到12 ...
- No-5.变量的命名
变量的命名 目标 标识符和关键字 变量的命名规则 0.1 标识符和关键字 1.1 标识符 标示符就是程序员定义的 变量名.函数名 名字 需要有 见名知义 的效果 标示符可以由 字母.下划线 和 数字 ...
- 第2节 hive基本操作:11、hive当中的分桶表以及修改表删除表数据加载数据导出等
分桶表 将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去 开启hive的桶表功能 set hive.enforce.bucketing= ...