【状压dp】Hamiton路径
描述
给定一张 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
对于这种n不是很大 又要求每个点都要走一遍 自然想到BFS 但是这题BFS 会超时 我们考虑状压dp
我们把每个节点缩成一个二进制位 1表示已经走过 我们再添加另外一维 这个二进制状态从那一个点走来
就可以进行转移了 对于一个二进制状态 从 j 走来 我们考虑一个为1的位 k
dp[i][j] = min(dp[i][j],dp[i^(1 << j)][k] + d[k][j]);
d为k j 之间的路径长

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long n;
long long d[30][30],dp[(1<<20)][20];
int main()
{
scanf("%lld",&n);
for(long long i = 0;i <= n - 1;i++)
for(long long j = 0;j <= n - 1;j++)
scanf("%lld",&d[i][j]);
long long maxx = (1<<n) - 1;
memset(dp,0x3f,sizeof(dp));
dp[1][0] = 0;
for(long long i = 1;i <= maxx;i++)
for(long long j = 0;j <= n - 1 ;j++)
{
if(i & (1<<j))
{
for(long long k = 0;k <= n - 1 ; k++)
if(i & (1<<k)&&(k != j))
dp[i][j] = min(dp[i][j],dp[i^(1 << j)][k] + d[k][j]);
}
}
cout<<dp[maxx][n - 1];
}
(对于从0开始的数组 我们要在每个for中统一从0开始 我被这个卡了好久 捂脸)
【状压dp】Hamiton路径的更多相关文章
- BZOJ2595 Wc2008 游览计划 【斯坦纳树】【状压DP】*
		
BZOJ2595 Wc2008 游览计划 Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为一个 ...
 - CH0103最短Hamilton路径 & poj2288 Islands and Brigdes【状压DP】
		
虐狗宝典学习笔记: 取出整数\(n\)在二进制表示下的第\(k\)位 \((n >> ...
 - Codeforces 453B Little Pony and Harmony Chest:状压dp【记录转移路径】
		
题目链接:http://codeforces.com/problemset/problem/453/B 题意: 给你一个长度为n的数列a,让你构造一个长度为n的数列b. 在保证b中任意两数gcd都为1 ...
 - 最短Hamilton路径(状压dp)
		
最短Hamilton路径实际上就是状压dp,而且这是一道作为一个初学状压dp的我应该必做的题目 题目描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 ...
 - poj3311 TSP经典状压dp(Traveling Saleman Problem)
		
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
 - bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
		
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
 - 【BZOJ-1097】旅游景点atr         SPFA + 状压DP
		
1097: [POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 1531 Solved: 352[Submit][Sta ...
 - HDU 1565&1569 方格取数系列(状压DP或者最大流)
		
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
 - Tirp(状压DP)
		
Description 有一个N*N的迷宫,其中有一些宝藏,现在,小A要从入口(1,1)出发,到达出口(N,N),每次,小A只能从当前的格子走到上下左右四个格子,为了不空手而归,小A决定要拿到所以的宝 ...
 
随机推荐
- Go语言核心36讲(Go语言进阶技术四)--学习笔记
			
10 | 通道的基本操作 作为 Go 语言最有特色的数据类型,通道(channel)完全可以与 goroutine(也可称为 go 程)并驾齐驱,共同代表 Go 语言独有的并发编程模式和编程哲学. D ...
 - TStor-OneCOS ,主打专一海量对象场景
			
谁能与你厮守终身 生活在21世纪,最常见的事莫过于更新换代了,找一款能长久适用的产品,是很多人都希望拥有的,特别是针对于云服务产品,而对象·混合云存储新增 TStor-OneCOS 就是这样一款可以 ...
 - 如何快速体验鸿蒙全新声明式UI框架ArkUI?
			
HDC2021将于10月22日在东莞松山湖正式开幕,大会将设立Codelab体验专区,超多好玩.有趣的Demo等你体验.想快速入门HarmonyOS?学习HarmonyOS新特性?以下几个Codela ...
 - T-SQL——关于XML类型
			
目录 0. 将结果集转化为XML格式 1. 列值拼接为字符串 2. 字符串转换为列值 3. 一些说明 参考 志铭-2021年10月23日 10:43:21 0. 将结果集转化为XML格式 测试数据 I ...
 - python使用Django框架开发简单项目
			
一. (1)使用idea生成一个python项目,安装Django框架: pip install django==1.8.2 (2)初始化项目: django-admin startproject x ...
 - Beta发布声明
			
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 Beta-发布声明 我们是谁 删库跑路对不队 我们在做什么 题士 进度如何 进度总览 一.功能与特性 1.一 ...
 - UltraSoft - Beta - Scrum Meeting 5
			
Date: May 21st, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 修复了课程通知链接的bug Liuzh 前端 暂无 Kkkk 前端 增加消息中心板 ...
 - 【二食堂】Alpha - Scrum Meeting 10
			
Scrum Meeting 10 例会时间:4.20 18:00~18:20 进度情况 组员 昨日进度 今日任务 李健 1. 与柴博合作完成登录注册页面issue 继续完成登录注册页面issue 柴博 ...
 - OO面向对象第三次作业总结
			
面向对象第三次作业总结 一.JML基础梳理及工具链 注释结构 行注释://@annotation 块注释:/*@ annotation @*/ 两种注释都是放在被注释部分上面. 常见表达式 原子表达式 ...
 - CodeForces-1076E   Vasya and a Tree
			
CodeForces - 1076E Problem Description: Vasya has a tree consisting of n vertices with root in verte ...