题意:

给出n个点,然后给出每两个点之间的路径,要求找到一条最短的路径,从第1个点出发,到达最后一个点,中间所有的点都只经过一次,要求这条路径是最短的。这称为最短Hamilton路径。

思路:

因为n只有20个点,所以考虑状压dp,每一个状态由两个数据组成,一个是这个状态最后停在了哪个点,一个是这个状态之前走过了哪些路径。

用f[1<<20][20]来记录这个状态下已经走过的最短路径。

那么 f[i][j] = min{f[1<<j ^ i][k]+w[k][j]} 要求 k 和 j 这两个点在 i 所记录的路径中出现过。

然后从第一个状态不断往后进行更新即可。

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define rep(i,a,b) for(int i = a; i <= b; i++)
using namespace std;int w[25][25],n;
int f[1<<21][25];void solve()
{memset(f,0x3f,sizeof f);f[1][0] = 0;rep(i,0,(1<<n)-1){rep(j,0,n-1)if(1<<j & i) //这个点被走过了,枚举结束点rep(k,0,n-1) //由哪个点更新而来 if(1<<k & i)f[i][j] = min(f[i][j],f[i ^ 1<<j][k]+w[k][j]);}printf("%d\n",f[(1<<n)-1][n-1]);
}int main()
{while(~scanf("%d",&n)){rep(i,0,n-1)rep(j,0,n-1)scanf("%d",&w[i][j]);solve();}return 0;
}

【状压dp】【最短Hamilton路径】相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 最短Hamilton路径-状压dp解法

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

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

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

  8. P1433 吃奶酪(状压dp)

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

  9. DP模型——状压DP

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

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

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

最新文章

  1. pymssql 安装后只有 .disk-info_变频空调安装注意事项
  2. UVa810 A Dicey Problem 筛子难题
  3. Leet Code OJ 110. Balanced Binary Tree [Difficulty: Easy]
  4. React 新特性 Hooks 讲解及实例(四)
  5. P2408 不同子串个数
  6. 代换-置换网络(SP网络)
  7. python 列表间隔取值_python list数据等间隔抽取并新建list存储的例子
  8. c2c旅游springboot开源_7个开源的 Spring Boot 前后端分离项目,一定要收藏!
  9. [语]××语录@××--第1篇
  10. [Erlang脚印 0004] gen_server
  11. lock condition
  12. SQLMap——Tamper学习
  13. LAMP架设论坛空间
  14. 淘宝电商创业可能会面临哪些问题?
  15. 计算机的桌面不见了,桌面上的图标不见了怎么办-电脑桌面图标不见了电脑屏幕桌面不见了,怎么办? 爱问知识人...
  16. iOS 9 Storyboard 教程(一上)
  17. 子网掩码的两种表示方法
  18. linux系统搭建局域网邮件,Linux局域网邮件服务器搭建
  19. (17)三维图形几何变换
  20. ISO20000与ISO27001认证如何进行有效整合实施?

热门文章

  1. 批量建立域帐号,摆脱管理员的痛!(原创+实战)
  2. 利用新浪api获取ip归属地
  3. Mybatis无法获取带有下划线前缀的字段的值
  4. 自定义新浪微博分享按钮
  5. Myeclipse10如何进行代码提示和自动补全
  6. php db类 应用实例,PHP-Laravel(DB类操作数据库)
  7. 用计算机弹飞云直下,飞云之下-韩红/林俊杰-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
  8. java中蓝色是多少_JAVA几个常见错误简析
  9. mysql隐式锁_innodB的隐式锁
  10. mysql 下一个月_mysql 取当天、昨天、上一个月、当前月和下个月数据