最短Hamilton路径

2023-11-19

题目

题目链接

题解

状压dp。


f[i][j]表示从0点按照路径i走到j点的最短距离。其中i为二进制数,1表示走过某点,0表示未走过某点,比如10010表示经过了1、4两个点,而不经过0、2、3点。

状态转移为:假设沿路径i走到j点经过k点,且由k直接到j,那么由于kj的距离是固定的,所以想要0j的距离最短,只要保证0k的距离最短即可,求出0k的距离加上kj的距离,取其中最小者就是0j的最短距离。


说实话,不明白为什么状态从00000每次加一遍历到11111就是正确的?如何(不严谨地)证明其合理性?很显然,如果将遍历的方式改为从11111每次减一到00000,那么结果就是错误的。(加一顺序遍历得到的每一个状态都可以由之前算得的状态计算出来)

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 20;
int n;
int w[N][N];
int f[1<<N][N]; 
int main()
{
	cin>>n;
	for(int i = 0;i < n;i ++)	
		for(int j = 0;j < n;j ++)
			cin>>w[i][j];
			
	memset(f, 0x3f, sizeof f);
	f[1][0] = 0; // 从0点走到0点的状态为(000001),距离为0
	for(int i = 0;i < (1 << n);i ++)
		for(int j = 0;j < n;j ++) // 枚举目的地,即最后一个点
			if((i >> j) & 1) // j点必须要走过才行
				for(int k = 0;k < n;k ++) // 枚举倒数第二个点
					if(((i - (1 << j)) >> k) & 1) // 除去j点后,k点必须走过才行
						f[i][j] = min(f[i][j], f[i - (1 << j)][k] + w[k][j]);
	
	cout << f[(1 << n) - 1][n-1] << endl;

	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最短Hamilton路径 的相关文章

  • 是否有与 posix_memalign 对应的 C++ 版本?

    当我打电话时posix memalign http man7 org linux man pages man3 posix memalign 3 html为类型的对象分配对齐的内存Foo在我的 C 代码中 我需要做一个reinterpret
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp

随机推荐

  • 求二叉树中两个指定节点的最短距离

    给定一个二叉树 找到该树中两个指定节点间的最短距离 思路 求最近公共祖先节点 然后再求最近公共祖先节点到两个指定节点的路径 再求两个节点的路径之和 const shortestDistance function root p q let l
  • Vue练习题(带解析)

    Vue基础入门 一 填空题 Vue是一套构建 用户界面 的渐进式框架 MVVM主要包含3个部分 分别是Model View和 ViewModel Vue中通过 refs 属性获取相应DOM元素 在进行Vue调试时 通常使用 vue devt
  • Qt实现隐藏按钮功能

    在Qt design界面中添加pushbutton 按钮 选中pushbutton 在右下角有按钮属性相关的修改内容 选中flat 按钮外围边框已消失 此时还差一步 需要修改一下 找到stylesheet 输入以下内容 输入 backgro
  • Go并发异步请求秀动抢票

    继上次python请求秀动接口 这次我将采用性能最佳的Go语言重构 tips 因分享了太多人 有人以此向外获利 所以停止分享 之前采用python异步请求 三次请求购票接口的思路 鉴于秀动app的防护措施愈来愈强 我将采用发挥go语言的协程
  • 实现一个在线抽奖系统,就算是个小白看了也能做出来(附源码)

    在线抽奖系统 1 项目介绍 1 功能介绍 2 开发环境与技术栈 3 项目演示 2 项目准备 1 代码框架 源码 2 数据库设计 3 后端对前端接口的实现 1 用户的登录 注册 注销 2 查询奖项设置 修改抽奖人数 3 新增 修改 删除奖项
  • JavaScript Table行填充

    使用JS脚本操作Table元素 在不同浏览器中操作方法不尽相同 当新建一行之后 IE中可以使用单元格操作来完成单元格的添加 而在FireFox中无法正确通过单元格来操作 而只能使用 td td 来实现 因此 在编写填充函数时 要注意检测浏览
  • 基础算法题——帅到没朋友(唯一性)

    帅到没朋友 当芸芸众生忙着在朋友圈中发照片的时候 总有一些人因为太帅而没有朋友 本题就要求你找出那些帅到没有朋友的人 输入格式 输入第一行给出一个正整数N 100 是已知朋友圈的个数 随后N行 每行首先给出一个正整数K 1000 为朋友圈中
  • 用TensorFlow.js实现AI换脸 !所以你知道某些网站视频的明星是怎么来的了吗?

    前言 相信很多小伙伴对TensorFlow js早已有所耳闻 它是一个基于JavaScript的深度学习库 可以在Web浏览器中运行深度学习模型 AI换脸是一种基于深度学习的图像处理技术 将一张人脸照片的表情 头发 嘴唇等特征转移到另一张人
  • python遇到can not import xxx错误

    一种不容易被发现的问题是循环引用导致该问题的发生 具体可参考 ImportError cannot import name xxxxxx 的三种类型的解决方法 Activewaste的博客 CSDN博客 cannot import name
  • Android NDK 编译 三方库记录 及 jni库封装问题

    因工作需求 要将原先的c 库跨平台编译 在Android上运行 其依赖了几个第三方库 也需要一起编译 在此做个记录 所需工具 centos 系统上完成 1 cmake 3 15 6 2 ndk android ndk r21e NDK 下载
  • Python自动抢红包,从此再也不会错过微信红包了!

    作者 上海小胖 来源 Python专栏 ID xpchuiit 目录 0 引言 1 环境 2 需求分析 3 前置准备 4 抢红包流程回顾 5 代码梳理 6 后记 0 引言 提到抢红包 就不得不提Xposed框架 它简直是个抢红包的神器 但使
  • windows禁用输入法

    Rime 呼出菜单的快捷键 ctrl grave 跟 vs code 呼出底部命令行的快捷键冲突了 每次用 vs code 时都会用 ctrl space 将输入法禁用 让它变成一个圈叉 由 1 这个快捷键是 windows 系统禁用输入法
  • vue中的事件修饰符

    vue中的事件修饰符 1 prevent 阻止默认事件 常用 a href http www baidu com a 2 stop 阻止事件冒泡 常用 margin top 20px demo1 height 50px background
  • Es中查询数据存在某个字段或者数据的不存在某个字段(must_not,must的使用)

    一 存在 二 不存在 包含两种意思 1 这条数据根本就没有这个字段 2 这条数据的字段的值为null
  • 区块链大作业前期热身报告

    作业内容 使用已有的开源区块链系统FISCO BCOS 完成私有链的搭建以及新节点的加入 截图说明搭建流程 自行编写一个智能合约并部署到私有链上 同时完成合约调用 截图说明部署流程 使用命令查看一个区块 并对各个字段进行解释 单群组FISC
  • 利用pytorch训练网络---垃圾分类,(resnet18)

    数据集包含6种垃圾 分别为cardboard 纸箱 glass 玻璃 metal 金属 paper 纸 plastic 塑料 其他废品 trash 数据数量较小 仅供学习 数据集标准备工作 包括将数据集分为训练集和测试集 制作标签文件 代码
  • redhat7.6 19c Rac禁用透明大页问题-/etc/default/grub:行8: 寻找匹配的 `“‘ 是遇到了未预期的文件结束符

    在安装redhat7 6的oracle 19c rac中 由于之前参考文档为centos版本 在执行禁用透明大页操作时报以下错误 原过程为 1 修改grub文件 cp etc default grub etc default grub ba
  • 百度智能云助力华瑞园智慧社区项目荣获IDC大奖

    在当今数字化 智能化的时代 科技的力量正日益显现 它改变着我们的生活方式 提高着我们的生活质量 9月15日 2023年IDC中国未来企业大奖优秀奖名单公布 在公众投票与专家评选团的严格评选下 百度智能云提供技术支持的 华瑞园智慧社区 项目荣
  • 运维_win server2008关闭危险端口445,135,137,138,139的方法

    昨晚爆出的onion勒索病毒 通过校园网传播 感染了很多同学的电脑 新闻 就在刚刚过去的5月12日晚上20点左右 全国各地的高校学生纷纷反映 自己的电脑遭到病毒的攻击 文档被加密 壁纸遭到篡改 并且在桌面上出现窗口 强制学生支付等价300美
  • 最短Hamilton路径

    题目 题目链接 题解 状压dp f i j 表示从0点按照路径i走到j点的最短距离 其中i为二进制数 1表示走过某点 0表示未走过某点 比如10010表示经过了1 4两个点 而不经过0 2 3点 状态转移为 假设沿路径i走到j点经过k点 且