博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
91. 最短Hamilton路径【状压DP】
阅读量:6288 次
发布时间:2019-06-22

本文共 1631 字,大约阅读时间需要 5 分钟。

描述

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

输入格式

第一行输入整数nn。

接下来nn行每行nn个整数,其中第ii行第jj个整数表示点ii到jj的距离(记为a[i,j])。

对于任意的x,y,zx,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]>=a[x,z]。

输出格式

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

数据范围

1≤n≤201≤n≤20

0≤a[i,j]≤1070≤a[i,j]≤107

输入样例:

50 2 4 5 12 0 6 5 34 6 0 8 35 5 8 0 51 3 3 5 0

输出样例:

18

 

 题解

本题如果用朴素算法枚举每一种路径,找最小值时间复杂度为O\left ( n * n! \right ) 

用状态压缩DP复杂度为O\left ( 20*2^{20} \right )

状态转移方程 dp[i][j] = min(dp[i][j], dp[i\oplus (1 << j)][k] + a[k][j]);

i 表示 方案集合  j表示枚举的点   k 表示j的上一个点 

关于位运算  

( n >> k ) & 1  表示n在二进制表示下的第k位

n ^ ( 1 << k ) 表示n 在二进制表示下的第k位取反

 

#include 
#include
//EOF,NULL#include
//memset#include
//ceil,floor,exp,log(e),log10(10),hypot(sqrt(x^2+y^2)),cbrt(sqrt(x^2+y^2+z^2))#include
//fill,reverse,next_permutation,__gcd,#include
#include
#include
#include
#include
using namespace std;#define rep(i, a, n) for (int i = a; i < n; ++i)#define sca(x) scanf("%d", &x)#define sca2(x, y) scanf("%d%d", &x, &y)#define sca3(x, y, z) scanf("%d%d%d", &x, &y, &z)#define pri(x) printf("%d\n", x)#define pb push_back#define mp make_pairtypedef pair
P;typedef long long ll;int dp[1 << 20][20];int n;int a[20][20];int main(){ sca(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { sca(a[i][j]); } } memset(dp, 0x3f, sizeof dp); dp[1][0] = 0; for (int i = 0; i < 1 << n; i++) { for (int j = 0; j < n; j++) { if (i >> j & 1) { for (int k = 0; k < n; k++) { if ((i ^ 1 << j) >> k & 1) { dp[i][j] = min(dp[i][j], dp[i ^ 1 << j][k] + a[k][j]); } } } } } pri(dp[(1<

 

转载于:https://www.cnblogs.com/llke/p/10780078.html

你可能感兴趣的文章
CCNP-6 OSPF试验2(BSCI)
查看>>
Excel 2013 全新的图表体验
查看>>
openstack 制作大于2TB根分区自动扩容的CENTOS镜像
查看>>
Unbuntu安装遭遇 vmware上的Easy install模式
查看>>
几个常用的ASP木马
查看>>
python分析postfix邮件日志的状态
查看>>
Mysql-5.6.x多实例配置
查看>>
psutil
查看>>
在git@osc上托管自己的代码
查看>>
机器学习算法:朴素贝叶斯
查看>>
小五思科技术学习笔记之扩展访问列表
查看>>
使用Python脚本检验文件系统数据完整性
查看>>
使用MDT部署Windows Server 2003 R2
查看>>
Redhat as5安装Mysql5.0.28
查看>>
通过TMG发布ActiveSync
查看>>
Web服务器的配置与管理(4) 配置访问权限和安全
查看>>
点石成金:“硅业报国”不仅是理念
查看>>
联络中心演化的四个特征
查看>>
《SQL与关系数据库理论——如何编写健壮的SQL代码》》一1.4 原始模型回顾
查看>>
云数据中心UPS供电系统需具备的特性
查看>>