hdu 5418 Victor and World(旅行商问题)

hdu 5418 Victor and World (floyd+状压dp) 题目大意:可重复访问顶点的TSP问题。 解法:点击打开链接 坑点:n=1 #include #include #include using namespace std; #define maxn 17 #define inf 0x3f3f3f3f int Map[maxn][maxn],dp[maxn][1<<maxn|1],n; void floyd() { for(in 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5418

解题思路:

旅行商问题(Traveling Salesman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Dantzig(1959)等人提出。

TSP问题是NP问题,没有已知的多项式时间的高效算法可以解决这一问题。不过在程序设计竞赛中还是有可能出现这种范围较小的题目的。

所有可能的路线共有(n-1)!种。这是一个非常大的值,即使n(假如为16)已经很小了,仍然无法试遍每一种情况。对于这个问题,我们使用DP来解决。首先让我们试着写出它的递推式。

假设现在已经访问过的顶点的集合(起点0当做还未访问过的顶点)为S,当前所在的顶点为v,用dp[S][v]表示从v出发访问剩余的所有顶点,最终回到顶点0的路径的权重总和的最小值。由于从v出发移动到任意的一个节点u不属于S,因此有如下递推式

dp[V][0] = 0

dp[S][v] = min{dp[S U {u}] + dis(v,u) | u 不属于S}

我们只要按照这个递推式进行计算就可以了。由于在这个递推式中,有一个下标是集合而不是普通的整数,因此需要稍加处理。首先我们试着使用记忆化搜索求解。虽然有一个下标不是整数,但是我们可以把它编码成一个整数,或者给它们定义一个全序关系并用二叉搜索树存储,从而可以使用记忆化搜索来求解。特别的,对于集合我们可以把每一个元素的选取与否对应到一个二进制位里,从而把状态压缩成一个整数,大大方便了计算和维护。对于不是整数的情况,很多时候很难确定一个合适的递推式,因此使用记忆化搜索可以避免这个问题。不过在这个问题中,对于任意两个整数i和j,如果它们对应的集合S(i)属于S(j),就有i<=j,因此可以像下面的写法一样,通过循环求出答案。

int dp[1<<N][N];//记忆化搜索使用的数组

void solve(){
    //用足够大的值初始化数组
    memset(dp,INF,sizeof(dp));
    dp[(1<<n)-1][0] = 0;

    //根据递推式依次计算
    for(int s = (1<<n)-2; s >= 0; s--){
        for(int v = 0; v < n; v++){
            for(int u = 0; u < n; u++){
                if(!(s>>u & 1)){
                    dp[s][v] = min(dp[s][v],dp[s|1<<u][u]+dis[v][u]);
                }
            }
        }
    }
    printf("%d\n",dp[0][0]);
}

官方题解:

我们首先需要预处理出任意两个国家之间的最短距离,因为数据范围很小,所以直接用Floyd就行了。之后,我们用f[S][i]表示访问国家的情况为S,当前最后访问的一个国家是i所需要的最小总油量,其中,S的二进制表示记录了访问国家的情况,S在二进制表示下的第i位(不管是从左往右还是从右往左都可以)如果是1则表示第i个国家被访问过了,否则表示第i个国家没有被访问过,那么f[S|(1<<i)][i]=min(f[S][j]+f[i][j]),其中i和j满足S&(1<<j)=1且S&(1<<i)=0。最开始时,除了f[1][1]是0,其他情况都是无穷大,之后先枚举S,再枚举i(我验题的时候因为这里搞反结果WA了),那么最终的答案就是min(f[(1<<n)-1][i]+f[i][1]),其中i\in∈ [2,n]。总复杂度为O(n^3+n^2*2^n)O(n​3​​+n​2​​∗2​n​​)。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const int INF = 0x3f3f3f;
const int N = 18;
//输入
int n,m;
int dis[N][N];
int dp[1<<N][N];//记忆化搜索使用的数组

void floyd(){
    for(int k=0; k<n; k++)
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++)
                if(dis[i][k]+dis[k][j]<dis[i][j])
                    dis[i][j]=dis[i][k]+dis[k][j];
}

void solve(){
    //用足够大的值初始化数组
    memset(dp,INF,sizeof(dp));
    dp[(1<<n)-1][0] = 0;

    //根据递推式依次计算
    for(int s = (1<<n)-2; s >= 0; s--){
        for(int v = 0; v < n; v++){
            for(int u = 0; u < n; u++){
                if(!(s>>u & 1)){
                    dp[s][v] = min(dp[s][v],dp[s|1<<u][u]+dis[v][u]);
                }
            }
        }
    }
    printf("%d\n",dp[0][0]);
}

int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        int u,v,w;
        memset(dis,INF,sizeof(dis));
        for(int i = 0; i < n; i++)
            dis[i][i] = 0;
        for(int i = 1; i <= m; i++){
            scanf("%d%d%d",&u,&v,&w);
            u--;v--;
            dis[u][v] = dis[v][u] = min(dis[u][v],w);
        }
        floyd();
        solve();
    }
    return 0;
}


汽车TARA分析实战:从威胁建模到安全需求落地的完整指南 在汽车电子电气系统开发中,威胁分析与风险评估(TARA)是确保功能安全与网络安全的核心方法论。其原理在于通过结构化的流程,系统性地识别资产、分析威胁场景并评估风险,旨在将安全理念前置,从设计源头规避风险。这一过程的技术价值在于将模糊的安全担忧转化为可量化、可追溯的工程需求,从而指导资源精准投放,是符合ISO 26262和ISO/SAE 21434标准要求的关键实践。其应用场景贯穿智能汽车从概念设计到系统开发的各个阶段,尤其对于涉及自动驾驶、智能座舱、车云通信等复杂功能的域控制器开发至关重要。本文聚焦于TAR 阅读详情

相关推荐

ST-Link V2的隐藏技能:多通道串口调试的终极指南

本文深入探讨了ST-Link V2的多通道串口调试功能,突破传统烧录工具的限制。通过详细的硬件配置、Arduino IDE设置和实战案例,展示了如何利用SWD接口实现多通道数据监控,提升STM32F103C8T6等开发板的调试效率。文章还提供了PCB布局优化和性能调优技巧,助力开发者充分发挥ST-Link V2的潜能。

weixin_29285605的博客 355

旅行商问题(动态规划_爬山算法_遗传算法)

问题描述 ​ 旅行商问题(Travelling Salesman Problem, 简记TSP,亦称货郎担问题):设有n个城市和距离矩阵D=[dij],其中dij表示城市i到城市j的距离,i,j=1,2 … n,则问题是要找出遍访每个城市恰好一次的一条回路并使其路径长度为最短。 一、动态规划解决旅行商问题 ​ 要使用动态规划,需要问题本身有最优子结构,我们需要找到要解决的问题的子问题。题目要求,从0(a)出发,经过[1(b),2©,3(d)]这几个城市,然后回到0,使得花费最少。要实现这个要求,需要从下面

sgsx11的博客 2万+

phaser3适配微信小游戏

phaser3适配微信小游戏

SilenzioX的博客 1803

关于旅行商问题的多种算法求解

通过旅行商问题来了解三个算法的区别

weixin_58351753的博客 1万+

抖音直播行为规范考试

抖音直播行为规范考试

Q1642968641的博客 1万+

从零开始学习PX4源码9(部署px4源码到gitee)

由于PX4-Autopilot托管在github,在没有翻墙的情况下,下载固件无法下载。为了提高下载速度,这里将PX4在github上的仓库以及其子仓库(依赖仓库)都搬移到gitee上了。本教程讲解如何快速部署px4固件到gitee上,实现不需要翻墙快速本地就可以下载PX4固件。暂时没有找到如何批量直接通过修改.gitmodules后,使用什么命令可以直接把所有的一级二级子模块的指向直接正常映射。!!

陌城烟雨 810

旅行商问题(动态规划方法,超级详细的)

一、题目 一个售货员必须访问n个城市,恰好访问每个城市一次,并最终回到出发城市。 售货员从城市i到城市j的旅行费用是一个整数,旅行所需的全部费用是他旅行经过的的各边费用之和,而售货员希望使整个旅行费用最低。(等价于求图的最短哈密尔顿回路问题)令G=(V, E)是一个带权重的有向图,顶点集V=(v0, v1, ..., vn-1)。从图中任一顶点vi出发,经图中所有其他顶点一次且只有一次,最后回到同一顶点vi的最短...

sdf57的博客 1万+

深入浅出块I/O子系统(四)请求处理过程

BIO请求处理的流程 函数scsi_request_fn()代码(摘自文件drivers/scsi/scsi_lib.c) (1)static void scsi_request_fn(struct request_queue *q) (2)int scsi_dispatch_cmd(struct scsi_cmnd *cmd) { host->hostt->queuecommand(host, cmd) } (3)struct sas_internal *i sas_queuec

sinat_37817094的博客 1347

旅行商问题(TSP)简介

什么是旅行商问题 旅行商问题(TravelingSalesmanProblem,TSP)是一个经典的组合优化问题。经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。 从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的Hamilton回路。由于该问题的可行解是所有顶点的全排列...

xiaozhangcsdn的博客 6万+

LPDDR6 技术标准详解(JESD209-6)

是继 LPDDR5/5X 之后的新一代低功耗 DRAM 标准,专为满足移动终端、AI、边缘计算等高带宽、低功耗场景而设计。该标准通过全新架构、动态功耗控制机制和增强型数据完整性机制,实现性能、能效与可靠性的全面升级。LPDDR6 并非仅是速度升级,更是内存架构设计思路的演进,围绕“低功耗 + 高带宽 + 强安全”的三维目标,构建下一代 SoC 平台关键基础。✅ 高带宽:支持 32B/64B 动态突发✅ 低功耗:动态电压、通道切换✅ 高可靠性:ECC + 自测试 + 安全区。

weixin_43199439的博客 2567

AI在生物学领域的应用:基因序列分析和人工智能生物学

好的,非常感谢您提供的这个精彩的主题和详细的要求。我会全力以赴,遵循您的要求写一篇内容丰富、结构清晰、论述深入的专业技术文章。现在,就让我们开始这篇关于"AI在生物学领域的应用:基因序列分析和人工智能生物学"的博客文章吧! 1. 背景介绍 1.1 生物信息学的兴起

AI天才研究院 1413

漫画:什么是旅行商问题?

需要规划出怎样的路线呢?举个例子:有一个快递员,要分别给三家顾客送快递,他自己到达每个顾客家的路程各不相同,每个顾客之间的路程也各不相同。那么,想要把快递依次送达这三家,...

程序员小灰的博客 4328

自动驾驶大模型---小米&华科的ORION端到端方案

本文介绍了小米汽车与华中科技大学联合开发的ORION自动驾驶端到端方案。该框架创新性地将视觉语言模型(VLM)与自动驾驶系统结合,包含QT-Former特征提取模块、大语言模型(LLM)推理模块和生成式规划器三大核心组件。通过视觉感知与语言理解的深度融合,ORION能更准确地理解人类指令并生成合理轨迹,同时提升系统的可解释性。实验证明,该方案在准确性、泛化能力和决策透明度方面均有显著优势。ORION框架为自动驾驶技术提供了新思路,有望推动行业向更安全、智能的方向发展。

智能汽车人的博客 2005

Victor and World(hdu 5418 旅行商问题)

Victor and World Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 262144/131072K (Java/Other) Problem Description After trying hard for many years, Victor has finally received a pilot licens

残阳止水 369

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

HDU 5418 Victor and World ( Floyed+旅行商问题)

http://acm.hdu.edu.cn/showproblem.php?pid=5418 旅行商问题(Traveling Salesman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。 本题题意就是这个意思,这里贴上 回溯法和枚举法 两种代

我要加油了,因为我还有很多NB的梦想! 912

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

hdu 5418 Victor and World 状态压缩dp,旅行商问题

Victor and World Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others) Total Submission(s): 385    Accepted Submission(s): 160 Problem Description After try

G.D.Retop的专栏 1162

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【HDU - 5418】Victor and World(tsp旅行商问题,状压dp,floyd最短路,图论)

题干: After trying hard for many years, Victor has finally received a pilot license. To have a celebration, he intends to buy himself an airplane and fly around the world. There arenncountries on the...

xuanweiace的博客 784

hdu 5418 Victor and World (状压dp)

目录问题分析代码 问题 分析 代码 /* hdu 5418 Victor and World 状压dp */ #include<bits/stdc++.h> using namespace std; typedef long long ll; const int inf = 0x7f7f7f7f; const int MXS = (1<<16)+5; const int MXN = 20; int N, M, mp[MXN][MXN], dp[MXS][MXN], c[MXS]; i

jpphy0的博客 283

HDU 5418 Victor and World

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5418 题意:给一个无向图,求从1出发经过所有点后回到1的最短路径,可以重复经过 因为可以重复经过,所以不能直接跑tsp 但是只要先用floyd跑一遍最短路,那就转化成了不能重复经过的模型,再跑一遍tsp就行了 #include<iostream> #include...

dengyaodan0206的博客 166

【hdu 5418】 Victor and world

【题目链接】          点击打开链接【算法】         状压DP         f[i][S]表示走的最后一步在i,状态为S         于是我们可以用最短路径 + 状压DP解决此题,由于不存在负边,所以可以用dijkstra+堆优化【代码】        #include&lt;bits/stdc++.h&gt; using namespace std; #define MA...

even_bao的博客 296

HDUOJ 5418 Victor and World -(状压DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 #include <iostream> #include <cstdio> #include <cstdlib> #include <string> #include <map> #include <algorithm> #...

rsy56640的博客 896

hdu 5418 Victor and World

题目:点击打开链接 题解: 题意:一个人从第一个城市出发,要求把城市都走完最后回到现在城市,耗油量最少。 思路分析:由于城市可以重复访问,从而任何状态下,由城市i到城市j没有路径上的限制,故从城市i到城市j必然选择路程最小的路径来走,可先用Floyd算法求出任意两城市之间的最短路或最小花费,然后通过状压DP来求解。 数学模型:dp[i][v]表示在状态v下,到达城市i所

kingsirre的博客 377

HDU 5418 Victor and World(Floyd + 状压DP解决TSP问题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 解题思路: 有n座城市,m条边,询问从1节点开始走遍所有节点回来的最短路径。 因为n比较小,因此可以用状压DP做 例如,我们用一个数i表示一种状态,若i转化为二进制为10111,表示去过1,2,3,5,没去过其他城市 先用Floyd求出任意两点最短路,记做mp[][],mp[i][j]...

shadiao.的博客 354

hdu5418 Victor and World 状压最短路

Victor and World Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 262144/131072 K (Java/Others) Total Submission(s): 2125Accepted Submission(s): 982 Problem Description After trying ha...

Amo丶 283

HDU 5418—Victor and World—【状态压缩+floyd】

Victor and World Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 262144/131072 K (Java/Others) Total Submission(s): 891Accepted Submission(s): 399 Problem Description After trying har...

饮酒在风里的博客 266

HDU 5418 Victor and World 【最短路径+状压DP】

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=5418 ★我一开始居然以为是TSP(旅行商问题),后来才发现这两者是有区别的。 旅行商问题:一个人从一个点出发 经过其他n个点一次 并返回原点 所需要的最短路径(一次不能多不能少) 翻译: 本题:从一个点开始 到其他点至少一次 所需要的最短路径 思路: 其实呢,这题感觉和TSP也差别不大 首先要...

HungTeen的博客 430
上一篇: Codeforces Round #317 (Div. 2) (572A Arrays,572B Order Book)
下一篇: BestCoder Round #52 (div.2)(hdu 5417,hdu 5418)
yphacker
博客等级 码龄12年 199粉丝 540原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值