openjudge 海贼王之伟大航路(状压dp)
问题分析
我们去考虑如何设计一个状态,才能满足无后效性和最优子结构呢?
如果我们从一维去想,用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]\}
此时 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)相关推荐
- 2018北大暑校acm算法训练课程 海贼王之伟大航路 状压dp
题干信息: "我是要成为海贼王的男人!",路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程.路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着&qu ...
- 源哥每日一题第十三弹 百练4124:海贼王之伟大航路 状压dp
连接:http://bailian.openjudge.cn/practice/4124 题意:从1到n走过所有点恰好一次最短时间.乱搞的话会完美的超时(阶乘级别的复杂度,虽然范围很小,但是也足够超时 ...
- 海贼王之伟大航路——状压记忆化搜索
海贼王之伟大航路 题意: 一共 n 个点,给定任意两点的距离 dis[i,j]dis[i, j]dis[i,j]. 问,从点 1 到点 n,中途所有节点经过且仅经过一次,距离最短为多少? (2< ...
- 百练4124:海贼王之伟大航路(状压DP)
题目来源:http://bailian.openjudge.cn/practice/4124/ 4124:海贼王之伟大航路 总时间限制: 1000ms 内存限制: 65536kB 描述 " ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
\(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...
- codeforces 8C. Looking for Order 状压dp
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
- 【每日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 ...
最新文章
- 第十六届全国大学智能车全国总决赛竞赛闭幕式
- P3385 【模板】负环
- php面试带项目_PHP面试常用算法(推荐)
- java学习(90):Character方法大小写转换
- 软件工程——HelloWorld
- Recover Binary Search Tree -- LeetCode
- TensorFlow进阶:车牌号识别项目
- 关于Atmel A5D31平台ALC5640音频芯片的问题记录
- smart3d加载到谷歌_Android Google Smart Lock
- Excel利用宏进行VBA编程
- 吉他音阶训练入门教程——上集(认识音阶)
- MATLAB提取 .fig 文件中的数据
- 流光容易把人抛,红了樱桃,绿了芭蕉
- 通过access口加vlan标签吗_浅谈-华为vlan下access、trunk、hybrid的配置及标签分析
- Android开发——简单计算器实现
- This application is currently offline解决办法
- 为什么将-Xms和-Xmx设置为相同的值?
- python如何同时运行两个函数_关于python:使2个函数同时运行
- 做好音乐社区不全靠钱,也不能只为了钱
- webpack2.0+ vue2.0
热门文章
- 操作系统学习笔记-虚拟内存
- 外行假装内行,我也来谈谈SAP BAPI和BADI
- 苹果手机的siri在哪里_苹果手机Siri功能的设置和使用 原来是这样的
- 3288 配置声卡芯片
- 新中式风格有哪些特点?新中式风格装修有哪些注意事项?
- 一个菜鸟实习生的月总结
- Visual studio未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包等问题解决
- SVM问题的求解方法SMO算法
- 《底层逻辑-半秒钟看透问题本质》读后感
- js 获取当前是这个年份的第几周+获取这周的开始和结束日期