最短Hamilton路径

时间限制: 2 Sec  内存限制: 128 MB

题目描述

给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。

输入

第一行一个整数n。
接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(一个不超过10^7的正整数,记为a[i,j])。
对于任意的x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]>=a[x,z]。

输出

一个整数,表示最短Hamilton路径的长度。

样例输入

4
0 2 1 3
2 0 2 1
1 2 0 1
3 1 1 0

样例输出

4

提示

从0到3的Hamilton路径有两条,0-1-2-3和0-2-1-3。前者的长度为2+2+1=5,后者的长度为1+2+1=4


状态压缩dp,把到每一点后已经过的点当成一种状态存起来,用二进制的每位的1或者0表示这一点有没有被经过

#include<bits/stdc++.h>
using namespace std;
int dp[1<<20][25];int main()
{int n,Map[25][25];scanf("%d",&n);for(int i=0; i<n; i++)for(int j=0; j<n; j++)scanf("%d",&Map[i][j]);if(n==2){printf("%d",Map[0][1]);return 0;}int sum=(1<<(n-2))-1;for(int i=0;i<=sum;i++)for(int j=0;j<=20;j++)dp[i][j]=INT_MAX;for(int i=1; i<=sum; i++){int now=1;for(int j=0; j<=n-3; j++){now=1<<j;if(now&i){if(now==i)dp[i][j+1]=Map[0][j+1];else{for(int k=0;k<=n-3;k++){int a=1<<k;if(k!=j&&(i&a))dp[i][j+1]=min(dp[i][j+1],dp[i-now][k+1]+Map[k+1][j+1]);}}}}}int ans=INT_MAX;for(int i=1;i<=n-2;i++)ans=min(ans,dp[sum][i]+Map[i][n-1]);printf("%d",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/tian-luo/p/9228570.html

最短Hamilton路径-状压dp解法相关推荐

  1. 最短Hamilton路径(状压dp)

    链接:https://ac.nowcoder.com/acm/problem/50909 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  2. P1433 吃奶酪(状压dp)

    洛谷 / 题目列表 / 题目详情 P1433 吃奶酪 提交 23.28k 通过 9.30k 时间限制 1.00s 内存限制 125.00MB 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问 ...

  3. 【状压DP】哈密顿回路问题

    [状压DP]哈密顿回路问题 lzq同学在我准备午睡的时候发了一道蓝桥杯的题目给我,是哈密顿回路的.第一次看的时候是想DFS+双向搜索优化减小搜索树规模,然后写烂了(如果有大佬用搜索优化写出来了麻烦教教 ...

  4. CH0103最短Hamilton路径 poj2288 Islands and Brigdes【状压DP】

    虐狗宝典学习笔记: 取出整数\(n\)在二进制表示下的第\(k\)位                                                    \((n >> ...

  5. 最短Hamilton路径(哈密顿图,状压dp)

    题目: 给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次. ...

  6. [状压dp] 最短Hamilton路径(模板题+状压dp)

    文章目录 0. 前言 1. 状压dp 模板题 0. 前言 状压 dp 就是采用二进制数保存状态,方便进行位运算操作.例如 八皇后.八数码问题也都是采用了状态压缩的思想来使用一个二进制数唯一对应集合中的 ...

  7. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

  8. 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp

    文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...

  9. DP模型——状压DP

    文章目录 前言 什么是状态压缩DP 基本例题1 前期思考 状态表示 状态计算 Code 基本例题2 前期思考 状态表示 状态计算 Code 扩展 棋盘式 小国王 思考 状态表示 状态计算 Code 玉 ...

最新文章

  1. docker命令:删除所有为stop状态的docker容器
  2. 上海教师中级职称英语计算机考试,计算机教师如果考过了软考中级对职称评定有用吗,学校会承认嘛,有人懂吗,求助...
  3. autocomplete=off inpu属性
  4. windows下gvim中文乱码解决方案
  5. mysql查询重复数据
  6. Ceres Solver: 高效的非线性优化库(二)实战篇
  7. MySQL/MariaDB Tips
  8. 04SpringMvc_映射器_BeanNameUrlHanderMapping
  9. 【翻译】FisheyeMultiNet: Real-time Multi-task Learning Architecture for Surround-view Automated Parking
  10. 微博开发笔记上(未完待续)
  11. 干货|java缓存技术详解
  12. 三星android系统应用,三星Android系统文件夹全解
  13. 快递地址自动识别填充
  14. 美日开年第二场大演习,这是要给虎年定个调吗
  15. 深圳APP开发共享汽车APP
  16. 计算机学科教育案例怎么写,关于举办2019年学院《计算机应用基础》课程教学改革实验案例征文比赛的通知...
  17. 《中华百寺》专题片开机 江苏13古刹入选百大名寺
  18. 2023最新短视频解析接口
  19. java计算机毕业设计企业间信息交互系统源代码+数据库+系统+lw文档
  20. ENIGMA的兴亡(一)

热门文章

  1. Could not find artifact com.sun:tools:jar:1.5.0 解决办法
  2. Visual C#之核心语言
  3. wpa_supplicant与kernel的接口
  4. WinAPI: midiOutGetNumDevs - 获取 MIDI 输出设备的数目
  5. ios之UIImageView
  6. Keepalived实现LVS的高可用全解析
  7. [分享]学历与学习力
  8. 推荐几款软件和几个网站
  9. Hadoop系列五:Hadoop之Zookeeper篇
  10. FileChannel应用实例——本地文件读数据(假定文件已存在)