题目:

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

输入格式

第一行输入整数n。

接下来n行每行n个整数,其中第ii行第jj个整数表示点ii到jj的距离(记为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路径的长度。

数据范围

1≤n≤20
0≤a[i,j]≤107

输入样例:

5
0 2 4 5 1
2 0 6 5 3
4 6 0 8 3
5 5 8 0 5
1 3 3 5 0

输出样例:

18

解题报告:n的数据范围比较小,可以直接暴力去求解,但是在看了别的大佬的题解后,发现居然可以状压dp求解,贼爽

ac代码:

#include<bits/stdc++.h>
// 哈密顿图。状压dp
using namespace std;
typedef long long ll;const int N=20,M=1<<20;
int dp[M][N],mp[N][N];
int n;int main()
{std::ios::sync_with_stdio(false);cin>>n;for(int i=0;i<n;i++)for(int j=0;j<n;j++)cin>>mp[i][j];memset(dp,0x3f,sizeof(dp));dp[1][0]=0;for(int i=0;i<(1<<n);i++)//i代表的是一个方案的集合,其中每个位置的0/1代表没有/有经过 这个点 {for(int j=0;j<n;j++)//枚举当前到了哪个点 {if((i>>j)&1)//如果i到达过j{for(int k=0;k<n;k++)//枚举到达j的点 {if(i-(1<<j)>>k&1)//去除集合j的集合i {dp[i][j]=min(dp[i][j],dp[i-(1<<j)][k]+mp[k][j]); } } } } }   cout<<dp[(1<<n)-1][n-1]<<endl;//输出最后的最优结果
}

最短Hamilton路径(哈密顿图,状压dp)相关推荐

  1. Contest Hunter 0103最短Hamilton路径 【状压dp】 By cellur925

    题目传送门 Hamilton路径的定义:从0(起点)到n-1(终点)不重不漏地经过每个点恰好一次. 由于数据范围非常小,考虑状压.如NOIP2017宝藏一题,把状态压缩设为n个点是否已到达的二进制数. ...

  2. 91. 最短Hamilton路径【状压DP】

    f[i][j]] 表示走了i状态 且最终点是j的最短路径 #include<bits/stdc++.h> using namespace std; const int N=20; int ...

  3. AcWing 91. 最短Hamilton路径(状态压缩DP+哈密顿回路)

    题目链接 https://www.acwing.com/problem/content/description/93/ 思路 这道题看似像一个最短路,但是并不是,因为我们要求对于每一个点都经过,但是最 ...

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

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

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

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

  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. 最短Hamilton路径-状压dp解法

    最短Hamilton路径 时间限制: 2 Sec  内存限制: 128 MB 题目描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamil ...

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

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

最新文章

  1. R语言ggplot2可视化:可视化所有日期不同时段任务的持续时间、将持续时间绘制成一条线(起始时间到结束时间),y轴表示活动发生的日期,x轴表示以小时为单位的时间
  2. Personal preference
  3. java数组长度最大值_java 数组排序、最大值、最小值 | 学步园
  4. Ubuntu 16.04上搭建CDH5.16.1集群
  5. 欧姆龙plc解密实例_西门子、施耐德、欧姆龙等13大PLC品牌8000个实例程序资料包...
  6. php异步处理任务工具,php异步任务处理: gearman
  7. 终端仿真程序_SecureCRT for mac(终端SSH工具)
  8. c#中结构与类的区别(转)
  9. 《信号与系统学习笔记》—信号与系统(三)
  10. 2017全国计算机二级office题库,2017全国计算机二级office选择题题库
  11. python下载整个网站_python 下载整个站点
  12. 黑苹果后遗症 台式机Win10时间总是不同步
  13. Linux以百万兆字节显示内存大小
  14. html5进度条progress使用实例,HTML5中的进度条progress元素详解
  15. besiege机器人_围攻besiege机器人 机器人制作思路
  16. python实现图片rgb通道分离
  17. fabric cita 调研对比
  18. 干货,看微信小程序后台用户数据如何演变和递增
  19. UGUI实现Joystick
  20. 思迈特软件Smartbi:传统BI被“革命”,AI是BI技术未来的发展趋势

热门文章

  1. 23、使用OpenCV和NCNN进行人物抠图并将背景设置成透明色
  2. 学术论文常用网址,自己收藏和分享给大家
  3. Windows10系统变慢,用上这19招,电脑性能大幅度提升!
  4. 基于Domoticz智能家居系统(十三)Domoticz-3.8153在Tiny6410开发板上的移植
  5. php调用nexmo发送短信,使用Nexmo或Twilio仅使用电话号码进行登录和验证
  6. Ubuntu下添加开机启动项的2种方法
  7. Python监听RabbitMq ready数量
  8. 监听springboot进程,如果关闭就重启
  9. AutoCAD.NET实现CAD截图
  10. 关于提取千位百位十位个位数字