题目
题目链接
题解状压dp。
f[i][j]
表示从0
点按照路径i
走到j
点的最短距离。其中i
为二进制数,1
表示走过某点,0
表示未走过某点,比如10010
表示经过了1、4两个点,而不经过0、2、3点。
状态转移为:假设沿路径i
走到j
点经过k
点,且由k
直接到j
,那么由于k
到j
的距离是固定的,所以想要0
到j
的距离最短,只要保证0
到k
的距离最短即可,求出0
到k
的距离加上k
到j
的距离,取其中最小者就是0
到j
的最短距离。
说实话,不明白为什么状态从00000每次加一遍历到11111就是正确的?如何(不严谨地)证明其合理性?很显然,如果将遍历的方式改为从11111每次减一到00000,那么结果就是错误的。(加一顺序遍历得到的每一个状态都可以由之前算得的状态计算出来)
代码#include
using namespace std;
const int N = 20;
int n;
int w[N][N];
int f[1n;
for(int i = 0;i w[i][j];
memset(f, 0x3f, sizeof f);
f[1][0] = 0; // 从0点走到0点的状态为(000001),距离为0
for(int i = 0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?