原创:http://acm.hdu.edu.cn/showproblem.php?pid=4114

题意:从1开始遍历完k个给定点,最终回到1,的最少时间

思路:首先是floyd预处理出任意两点之间的最短距离。dp[state1][state2][u]表示在该状态state1(已经访问过的景点)、state2(手中有的景点的票)、目前所在的位置时所花费的时间的最小值,于是答案就是dp[(1<<k)-1][state][1]了(0<=state<(1<<n))。

一直写spfa,这次写爆内存了,不得不写三维表,三维表for循环顺序,一直维护不好,

像这次的:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define inf 1<<30
#define FILL(a,b) memset(a,b,sizeof(a))int dp[1<<9][1<<9][55];//访问过的+收集的票+当前顶点
int pos[55],time[9],f_time[9],map[55][55];
int Mask[55];
int n,m,k,ans;void floyd()
{for(int k=1; k<=n; k++)for(int i=1; i<=n; i++)for(int j=1; j<=n; j++)if(map[i][k]!=inf&&map[k][j]!=inf&&map[i][k]+map[k][j]<map[i][j])map[i][j]=map[i][k]+map[k][j];
}void Get_Dp()
{for(int i=0; i<=(1<<k); i++)for(int j=0; j<=(1<<k); j++)for(int u=1; u<=n; u++)dp[i][j][u]=inf;dp[0][0][1]=0;for(int state2=0; state2<(1<<k); state2++) {for(int state1=0; state1<(1<<k); state1++) {for(int u=1; u<=n; u++)if(dp[state1][state2][u]<inf) {for(int i=0; i<k; i++)if(!(state1&(1<<i))){int cost=map[u][pos[i]];if(state2&(1<<i))cost+=f_time[i];else cost+=time[i];dp[state1|(1<<i)][state2|Mask[pos[i]]][pos[i]]=min(dp[state1|(1<<i)][state2|Mask[pos[i]]][pos[i]],dp[state1][state2][u]+cost);}for(int v=1; v<=n; v++) {dp[state1][state2|Mask[v]][v]=min(dp[state1][state2|Mask[v]][v],dp[state1][state2][u]+map[u][v]);}}}}ans=inf;for(int state=0;state<(1<<k);state++){ans=min(ans,dp[(1<<k)-1][state][1]);}
}int main()
{int _case,u,v,w,num,t=1;scanf("%d",&_case);while(_case--) {scanf("%d%d%d",&n,&m,&k);for(int i=1; i<=n; i++)for(int j=1; j<=n; j++)map[i][j]=(i==j?0:inf);while(m--) {scanf("%d%d%d",&u,&v,&w);map[u][v]=map[v][u]=min(map[u][v],w);}FILL(Mask,0);for(int i=0; i<k; i++) {scanf("%d%d%d%d",&pos[i],&time[i],&f_time[i],&num);while(num--) {scanf("%d",&v);Mask[v]|=(1<<i);}}floyd();Get_Dp();printf("Case #%d: %d\n",t++,ans);}return 0;
}

HDU Disney's FastPass相关推荐

  1. hdu Disney's FastPass(状态压缩dp)

    这种题我一直喜欢用bfs搞的,但是这个题不太好bfs,主要是我刚开始想的是通过边进行状态转移,这样很不好写...于是就坑爹了,调了很久sample都没出... 于是学习了一下别人的思想...通过&qu ...

  2. hdu4114.Disney's FastPass

    http://acm.hdu.edu.cn/showproblem.php?pid=4114 题意:给定一个带权无向同(<=50)和图中若干个点(<=8),..现在要你'游'这些点,'游' ...

  3. hdu 4114 Disney's FastPass 状压dp

    点击打开链接 题意: 游戏园里有N个区域,有M条边连接这N个区域,有K个要访问的景点.对于每个景点告诉你这个景点所在的区域,要访问这个景点需要等待一定时间,如果没有FastPass,等待时间有Ti,否 ...

  4. HDU 4114 Disney's FastPass

    传送门 状压dp+最短路. 一个无向图,接下来给出一些兴趣点,每个兴趣点被访问时有一定耗时.找一条从起点开始访问所有兴趣点再回到起点耗时最短的路(必须访问所有兴趣点,途中可以经过任意点(经过任意点包括 ...

  5. HDU 4114 Disney's FastPass(状压dp)

    题意就是给你一些点,有的地方有景区,有的地方有某些景点的优先票,拿优先票去景点和不拿的时间不一样.问从地点1出发去所有景点再回来的最短时间. 得把景点,景区进行状压.即dp[i][j][k]代表参观景 ...

  6. 【LDU】 Week2自测 Disney‘s FastPass | 状压dp、Floyd

    这题是hdu 4114... 跟着19的打了打周测,发现个好题 写了写还wa了一发 题目大意: 给出n个点,k个要旅游的景点,然后给出k个景点的信息(位置,t,ft,门票所在地点),t于ft表示,如果 ...

  7. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  8. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  9. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

最新文章

  1. git stash 拉去_git操作命令符
  2. springCloud之配置中心学习
  3. 低头族的第三只眼,“赛博朋克”新装备让你走路不再撞树
  4. 0-1背包(及初始化问题)
  5. inc指令是什么意思_mips指令集与cpu架构(一)
  6. 如何提高安卓代码的质量和语法
  7. LeetCode 1214. 查找两棵二叉搜索树之和(二叉树迭代器+双指针)
  8. 如何集成Python代码和GUI来创建一个简单的游戏?
  9. LeetCode 189. Rotate Array
  10. android 底部动画,Android实现360手机助手底部的动画菜单
  11. 生活是没有什么阳光的
  12. AI实战:基于AdvancedEAST的自然场景图像文本检测算法
  13. 绑定touch事件后click无效,vue项目解决棒法
  14. ps核心工具-可选颜色
  15. Android 打开URL
  16. java俄罗斯方块旋转_java俄罗斯方块旋转算法,求解
  17. DOS远程桌面连接命令
  18. USACO 2021 December Contest, Bronze
  19. 加拿大标准CAN/ULC-S102与美国标准ASTM E84 一样吗?
  20. 关于“Threats to Validity”的介绍

热门文章

  1. windows10新增本地账户
  2. Python知识点大全--如何学好Python
  3. Linux下优秀的音频编辑软件
  4. 嵌入式系统设计(三):Vim编辑器的学习
  5. 与微型计算机运算速度无关的是,四川大学《计算机应用基础0006》17春在线作业1...
  6. 计算机系统仿真缩写,仿真语言
  7. logstash 数据重复问题
  8. 云主机和电脑主机服务器有什么区别?
  9. 用阿里云搭建自己的云主机详细教程
  10. MyBatis----回顾mybatis自定义和环境搭建+完善自定义Mybatis的注解开发