POJ2686 Traveling by Stagecoach (状压DP)
将车票的使用情况用二进制表示状态,对其进行转移即可。
但是我一开始写的代码是错误的(注释部分),看似思路是正确的,但是暗藏很大的问题。
枚举S,我们要求解的是dp[S][v],这个是从u转移过来的,不可以写成dp[S|(1<<i)][v]。这也是一次惨痛的教训......
1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 using namespace std;
5 const double INF=0x3f3f3f3f;
6 double ans;
7 int n,m,p,a,b;
8 int t[20];
9 int dis[50][50];
10 double dp[1<<10][32];//dp[s][u]表示到达当前u点(使用s的车票)的最小花费
11
12 void solve(){
13 //memset(dp,0x3f,sizeof(dp));//整型数赋值,不可以
14 for(int i=0;i<(1<<(n+1));i++)
15 fill(dp[i],dp[i]+m+1,INF);
16 dp[0][a]=0;
17 ans=INF;
18 for(int S=0;S<(1<<n);S++){
19 for(int u=1;u<=m;u++)
20 for(int i=0;i<n;i++)
21 if((S>>i)&1)//使用i车票
22 for(int v=1;v<=m;v++)
23 if(dis[u][v]>=0)
24 dp[S][v]=min(dp[S][v],dp[S&~(1<<i)][u]+dis[u][v]/(double)t[i]);
25 ans=min(ans,dp[S][b]);
26 }
27 }
28
29 /*void solve(){ //错误代码
30 //memset(dp,0x3f,sizeof(dp));//整型数赋值,不可以
31 for(int i=0;i<(1<<(n+1));i++)
32 fill(dp[i],dp[i]+m+1,INF);
33 dp[0][a]=0;
34 ans=INF;
35 for(int S=0;S<(1<<n);S++){
36 for(int u=1;u<=m;u++)
37 for(int i=0;i<n;i++)
38 if(!(S>>i)&1)//未使用i车票
39 for(int v=1;v<=m;v++)
40 if(dis[u][v]>=0)
41 dp[S|(1<<i)][v]=min(dp[S|(1<<i)][v],dp[S][u]+dis[u][v]/(double)t[i]);
42 ans=min(ans,dp[S][b]);
43 }
44 }*/
45
46 int main(){
47 while(~scanf("%d%d%d%d%d",&n,&m,&p,&a,&b)){
48 if(n+m+p+a+b==0) break;
49 for(int i=0;i<n;i++) scanf("%d",&t[i]);
50 memset(dis,-1,sizeof(dis));
51 for(int i=0;i<p;i++){
52 int u,v,w;
53 scanf("%d%d%d",&u,&v,&w);
54 dis[u][v]=dis[v][u]=w;
55 }
56 solve();
57 if(ans==INF) printf("Impossible\n");
58 else printf("%.3f\n",ans);
59 }
60 return 0;
61 }
POJ2686 Traveling by Stagecoach (状压DP)的更多相关文章
- POJ 2686 Traveling by Stagecoach (状压DP)
题意:有一个人从某个城市要到另一个城市, 有n个马车票,相邻的两个城市走的话要消耗掉一个马车票.花费的时间呢,是马车票上有个速率值 ,问最后这个人花费的最短时间是多少. 析:和TSP问题差不多,dp[ ...
- Traveling by Stagecoach /// 状压DP oj22914
题目大意: 输入n,m,p,a,b n是车票数(1<=n<=8),m是城市数(2<=m<=30) p是路径数(可能为0),a是起点,b是终点 接下来一行有n个数 为每张车票的马 ...
- POJ 2686 Traveling by Stagecoach 壮压DP
大意是有一个人从某个城市要到另一个城市(点数<=30) 然后有n个马车票,相邻的两个城市走的话要消耗掉一个马车票. 花费的时间呢,是马车票上有个速率值,用边/速率就是花的时间. 问最后这个人花费 ...
- POJ2686 Traveling by Stagecoach 状态压缩DP
POJ2686 比较简单的 状态压缩DP 注意DP方程转移时,新的状态必然数值上小于当前状态,故最外层循环为状态从大到小即可. #include <cstdio> #include < ...
- 【状压DP】poj2686 Traveling by Stagecoach
状压DP裸题,将({当前车票集合},当前顶点)这样一个二元组当成状态,然后 边权/马匹 当成边长,跑最短路或者DAG上的DP即可. #include<cstdio> #include< ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- codeforces 21D. Traveling Graph 状压dp
题目链接 题目大意: 给一个无向图, n个点m条边, 每条边有权值, 问你从1出发, 每条边至少走一次, 最终回到点1. 所走的距离最短是多少. 如果这个图是一个欧拉回路, 即所有点的度数为偶数. 那 ...
- poj2686 状压dp入门
状压dp第一题:很多东西没看懂,慢慢来,状压dp主要运用了位运算,二进制处理 集合{0,1,2,3,....,n-1}的子集可以用下面的方法编码成整数 像这样,一些集合运算就可以用如下的方法来操作: ...
- TSP问题之状压dp法
首先,我们先来认识一下什么叫做TSP问题 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
随机推荐
- HashTable集合和练习题_计算一个字符串中每一个字符出现的次数
HashTable集合 /** * java.util.Hashtable<K,V>集合 implement Map<K,V>接口 * Hashtable:底层也是一个哈希表, ...
- YII behaviors使用
文件 frontend/libs/FilterTest.php <?php /** * Created by PhpStorm. * Date: 2016/5/27 * Time: 14:16 ...
- Dapr学习(4)之eShopOnDapr部署(Rancher2.63&k3s)
本篇主要讲述一下github上基于Dapr实现的商城demo在(K8s or K3s)环境中的部署实践,本文环境基于k3s&rancher2.6.3 1.eShopOnDapr源代码及概述 源 ...
- 大数据平台迁移实践 | Apache DolphinScheduler 在当贝大数据环境中的应用
大家下午好,我是来自当贝网络科技大数据平台的基础开发工程师 王昱翔,感谢社区的邀请来参与这次分享,关于 Apache DolphinScheduler 在当贝网络科技大数据环境中的应用. 本次演讲主要 ...
- BZOJ4580/Luogu3147 [Usaco2016 Open]248
amazing #include <iostream> #include <cstdio> #include <cstring> #include <algo ...
- Redis 06 哈希
参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 哈希就是 ke ...
- 一文理解Hadoop分布式存储和计算框架入门基础
@ 目录 概述 定义 发展历史 发行版本 优势 生态项目 架构 组成模块 HDFS架构 YARN架构 部署 部署规划 前置条件 部署步骤 下载文件(三台都执行) 创建目录(三台都执行) 配置环境变量( ...
- Android OOM 问题探究 -- 从入门到放弃
一.前言 最近客户反馈了一些OOM的问题,很早之前自己也有简单了解过OOM的知识,但时间久远,很多东西都记不清了. 现在遇到这个OOM问题,也即趁此搜索了一些资料,对OOM问题做一些探究,把资料记录于 ...
- WebStorm 配置 Vue3 的文件模板
WebStorm 默认的 Vue 模板不是 setup 函数(组合式 API)模板,而是 Options API 模板.在设置中搜索 File and Code Templates 编辑创建 vue ...
- CSP-S 2020 T4 贪吃蛇 (双队列模拟)
题面 题解 先看数据,T<=10,用平衡树或优先队列是可以拿70分的,大体思路和正解思路是一样的,每次直接修改,然后模拟. 我们模拟的时候,主要是在过程中算出最终被吃的有选择权的蛇的最后选择时刻 ...