问题分析

我们去考虑如何设计一个状态,才能满足无后效性和最优子结构呢?
如果我们从一维去想,用dp[v]dp[v]dp[v]表示终点为vvv时花费的最小时间是多少,那么明显是不够的,因为它无法保证你是否访问节点的时候会重复,然鹅题目要求恰好每一个节点只访问一次。所以,我们去加一维集合状态去约束它。用dp[S][v]" role="presentation">dp[S][v]dp[S][v]dp[S][v]来表示恰好已经无重复访问节点集合SSS并且终点为v" role="presentation">vvv时所花费的最小时间,这样我们就可以满足题意了。
转移方程也显然易见

dp[S][v]=min{dp[s′][u]+e[u][v]}dp[S][v]=min{dp[s′][u]+e[u][v]}

dp[S][v] = min\{dp[s'][u]+e[u][v]\}
此时 v∈S,s′=S–v,u∈s′v∈S,s′=S–v,u∈s′v ∈S, s’ = S – v, u ∈s’

#include<bits/stdc++.h>
using namespace std;int n,e[20][20],dp[1<<20][20],inf = 1e9;int rec(int s,int v)
{if (dp[s][v] != inf)return dp[s][v];if (s != 0 && v == 0) //如果已经访问过其它节点但是终点却为0了return dp[s][v] = inf;if (s == 0 && v == 0) //边界条件, 已经访问过的集合为0, 并且在起点, 此时不花费时间return dp[s][v] = 0;int res = inf;for (int u = 0; u < n; ++u)if (u != v && (s >> u & 1)) //如果u属于s集合res = min(res, rec(s - (1 << u), u) + e[u][v]);//状态[已经访问过集合为{s - (1 << u)}, 终点为u]所需的最少时间+u->v的时间return dp[s][v] = res; //构成已访问集合为s终点为v的状态
}int main()
{//freopen("in.txt","r",stdin);cin>>n;for(int i = 0; i < n; ++i){for(int j = 0; j < n; ++j){cin>>e[i][j];}}/*初始到达目标并且访问完所有集合所需代价无穷大*/for(int i = 1; i < 1<<n; ++i)for(int j = 0; j < n; ++j)dp[i][j] = inf;printf("%d\n",rec((1<<(n-1))-1,n-1));//从起点0开始到到达终点n-1并且恰好不重复访问完所有的集合所需的最少时间return 0;
}

openjudge 海贼王之伟大航路(状压dp)相关推荐

  1. 2018北大暑校acm算法训练课程 海贼王之伟大航路 状压dp

    题干信息: "我是要成为海贼王的男人!",路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程.路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着&qu ...

  2. 源哥每日一题第十三弹 百练4124:海贼王之伟大航路 状压dp

    连接:http://bailian.openjudge.cn/practice/4124 题意:从1到n走过所有点恰好一次最短时间.乱搞的话会完美的超时(阶乘级别的复杂度,虽然范围很小,但是也足够超时 ...

  3. 海贼王之伟大航路——状压记忆化搜索

    海贼王之伟大航路 题意: 一共 n 个点,给定任意两点的距离 dis[i,j]dis[i, j]dis[i,j]. 问,从点 1 到点 n,中途所有节点经过且仅经过一次,距离最短为多少? (2< ...

  4. 百练4124:海贼王之伟大航路(状压DP)

    题目来源:http://bailian.openjudge.cn/practice/4124/ 4124:海贼王之伟大航路 总时间限制: 1000ms  内存限制: 65536kB 描述 " ...

  5. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  6. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  7. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  8. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  9. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

最新文章

  1. 第十六届全国大学智能车全国总决赛竞赛闭幕式
  2. P3385 【模板】负环
  3. php面试带项目_PHP面试常用算法(推荐)
  4. java学习(90):Character方法大小写转换
  5. 软件工程——HelloWorld
  6. Recover Binary Search Tree -- LeetCode
  7. TensorFlow进阶:车牌号识别项目
  8. 关于Atmel A5D31平台ALC5640音频芯片的问题记录
  9. smart3d加载到谷歌_Android Google Smart Lock
  10. Excel利用宏进行VBA编程
  11. 吉他音阶训练入门教程——上集(认识音阶)
  12. MATLAB提取 .fig 文件中的数据
  13. 流光容易把人抛,红了樱桃,绿了芭蕉
  14. 通过access口加vlan标签吗_浅谈-华为vlan下access、trunk、hybrid的配置及标签分析
  15. Android开发——简单计算器实现
  16. This application is currently offline解决办法
  17. 为什么将-Xms和-Xmx设置为相同的值?
  18. python如何同时运行两个函数_关于python:使2个函数同时运行
  19. 做好音乐社区不全靠钱,也不能只为了钱
  20. webpack2.0+ vue2.0

热门文章

  1. 操作系统学习笔记-虚拟内存
  2. 外行假装内行,我也来谈谈SAP BAPI和BADI
  3. 苹果手机的siri在哪里_苹果手机Siri功能的设置和使用 原来是这样的
  4. 3288 配置声卡芯片
  5. 新中式风格有哪些特点?新中式风格装修有哪些注意事项?
  6. 一个菜鸟实习生的月总结
  7. Visual studio未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包等问题解决
  8. SVM问题的求解方法SMO算法
  9. 《底层逻辑-半秒钟看透问题本质》读后感
  10. js 获取当前是这个年份的第几周+获取这周的开始和结束日期