ACAG 0x01-4 最短Hamilton路径

论为什么书上标程跑不过这道题……

首先,这道题与今年CSP-S2的D1T3有着异曲同工之妙,那就是——都有$O(n!)$的做法!(大雾)

这道题的正解是状压DP。

对于任意时刻,我们可以使用一个$n$位二进制数,若其第$i$位为$1$,则表示第$i$个点已经被经过,反之未被经过。因此我们可以使用$f[i][j]$表示状态为二进制数$i$,目前处于点$j$时的最短路径。

在起点时,有$f[1][0]=0$,即只经过了点$0$,而相应的状态就是只有最低位为$1$。

记得要把$f$数组的其他值均初始化为$INF$。

不难得到,我们要的最终结果是$f[(1<<n)-1][n-1]$,即经过所有点($i$的每一位都是$1$),处于终点$n-1$的最短路。

而本题的状态转移方程为:

$f[i][j]=min(f[i][j],f[i^(1<<j)][k]+dis[j][k])$ 当且仅当$(i>>j)&1=1$且$(i>>k)&1=1$

其中,因为$j$只能被恰好经过一次,且$k$也被恰好经过一次,所以考虑所有这样的$k$取最小值即可。

#include<bits/stdc++.h>
#define N 20 using namespace std; int n;
int dis[N][N],f[1<<N][N]; void Read() {
scanf("%d",&n);
for(int i=0;i<=n-1;i++) {
for(int j=0;j<=n-1;j++) {
scanf("%d",&dis[i][j]);
}
}
return;
} void Solve() {
memset(f,0x3f,sizeof(f));
f[1][0]=0;
for(int i=1;i<=(1<<n)-1;i++) {
for(int j=0;j<=n-1;j++) {
if((i>>j)&1) {
for(int k=0;k<=n-1;k++) {
if((i>>k)&1) {
f[i][j]=min(f[i][j],f[i^(1<<j)][k]+dis[j][k]);
}
}
}
}
}
printf("%d",f[(1<<n)-1][n-1]);
return;
} int main()
{
Read();
Solve();
return 0;
}

ACAG 0x01-4 最短Hamilton路径的更多相关文章

  1. 『最短Hamilton路径 状态压缩DP』

    状压DP入门 最短Hamilton路径 Description 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamil ...

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

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

  3. 位运算 - 最短Hamilton路径

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

  4. 0103 最短Hamilton路径【状压DP】

    0103 最短Hamilton路径 0x00「基本算法」例题 描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Ham ...

  5. 最短Hamilton路径

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

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

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

  7. AcWing 91. 最短Hamilton路径

    今天第一次在\(AcWing\)这个网站上做题,来发一下此网站的第一篇题解 传送门 思路 直接枚举的话时间复杂度为\(O(n*n!)\) 复杂度显然爆炸,所以我们用二进制枚举,这样就可以把复杂度降到\ ...

  8. # 最短Hamilton路径(二进制状态压缩)

    最短Hamilton路径(二进制状态压缩) 题目描述:n个点的带权无向图,从0-n-1,求从起点0到终点n-1的最短Hamilton路径(Hamilton路径:从0-n-1不重不漏的每个点恰好进过一次 ...

  9. 最短Hamilton路径 数位dp

    最短Hamilton路径 #include<bits/stdc++.h> using namespace std; ; <<maxn][maxn]; int maps[maxn ...

随机推荐

  1. mysql数据库每天备份

    以备份mysql下的test数据库为例,备份到/home/data 使用mysqldunp命令 dump.sh mysqldump -h127. -uadmin -P3306 -ppassword t ...

  2. Python窗体操作函数

    实现了一个window下对窗体操作的类,实现的功能如:移动窗体.获取窗体位置和大小.截取窗体图片.坐标转换等. 直接上代码: # coding=utf-8 import win32con import ...

  3. springboot 控制台程序读取配置文件(原创)

    首先新建一个springboot项目,此处省略. 1.新建一个application.properties person.name=kevin person.age=6 person.sex=male ...

  4. proc 下创建与应用交互的可读写节点

    内核版本:Linux-4.14 随便写了个 proc 下节点的测试程序,可以用来与应用层交互. 也可以单独的用来做调试打印使用,例如封装个 my_printk 将信息单独存在节点内,然后可以在应用层 ...

  5. leetcode动态规划笔记二

    动态规划 题目分类 一维dp 矩阵型DP Unique Paths II : 矩阵型DP,求所有方法总数 Minimum Path Sum:矩阵型,求最大最小值 Triangle : 矩阵型,求最大最 ...

  6. 全栈项目|小书架|服务器端-NodeJS+Koa2 实现评论功能

    评论功能分析 上图可以看出评论功能主要实现了:评论的发布.评论列表的展示. 在不考虑子评论以及图片评论的场景下,评论功能主要有以下两个接口: 发布评论 获取评论列表(考虑分页) 评论 Model 的建 ...

  7. 阿里巴巴 Java 开发手册 (十二)安全规约

    1. [强制]隶属于用户个人的页面或者功能必须进行权限控制校验. 说明:防止没有做水平权限校验就可随意访问.修改.删除别人的数据,比如查看他人的私信 内容.修改他人的订单. 2. [强制]用户敏感数据 ...

  8. IE浏览器 location.href 不跳转

    var url = "https://www.cnblogs.com/zing"; location.href = url; window.event.returnValue = ...

  9. MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  10. 变量.argsort()的用法

    a=[1,2,5,9,7,3]a=np.array(a)order = a.argsort() # 从小到大排序,并返回索引值print('order=',order)order1= a.argsor ...