HDU 5418 Victor and World(状压dp、floy最短路)

hdu5418 最短哈密顿回路 先用floyd求出每两点之间的最短路。一开始我用深搜计算最短哈密顿回路,毫无意外TLE了。 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> #include<string> #include<map> #include<set> #include<algorithm> # 阅读详情
Victor and World Time Limit:2000MS    Memory Limit:131072KB    64bit IO Format:%I64d & %I64u

Description

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 are   countries on the earth, which are numbered from   to   . They are connected by   undirected flights, detailedly the   -th flight connects the     -th and the     -th country, and it will cost Victor's airplane     L fuel if Victor flies through it. And it is possible for him to fly to every country from the first country.

Victor now is at the country whose number is   , he wants to know the minimal amount of fuel for him to visit every country at least once and finally return to the first country.

Input

The first line of the input contains an integer   , denoting the number of test cases.
In every test case, there are two integers   and   in the first line, denoting the number of the countries and the number of the flights.

Then there are   lines, each line contains three integers     ,     and     , describing a flight.

  .

  .

  .

    .

      .

Output

Your program should print   lines : the   -th of these should contain a single integer, denoting the minimal amount of fuel for Victor to finish the travel.

Sample Input

1
3 2
1 2 2
1 3 3

Sample Output

10

首先用Folyd求出任意两点间的最短路。

然后令dp[i][S]表示访问情况为S,最后访问i国家的最小花费。

转移方程为dp[i][S|(1<<i-1)]=min(dp[j][S]+mp[j][i])(对于所有的j)(i,j满足集合S包含j不包含i,S是用二进制表示的集合)

mp[j][i]表示从j到i的最短路。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int map[17][17];
int dp[17][1<<17];
int main()
{
    int t,n,m;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&n,&m);
        int x,y,d;
        memset(map,0x3f,sizeof(map));
        for(int i=0;i<m;i++){
            scanf("%d %d %d",&x,&y,&d);
            map[y][x]=map[x][y]=min(map[x][y],d);
        }
        for(int i=0;i<=n;i++) map[i][i]=0;
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
              for(int j=1;j<=n;j++)
                map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
        memset(dp,0x3f,sizeof(dp));
        dp[1][1]=0;
        for(int i=1;i<=((1<<n)-1);i++)///zhuang tai
        {
            for(int j=1;j<=n;j++)///qi dian
            {
                if(i&(1<<(j-1)))
                    for(int k=1;k<=n;k++)///zhong dian
                    {
                        if((i &(1 <<(k -1))) == 0)
                            dp[k][i|(1<<(k-1))]=min(dp[k][i|(1<<(k-1))],dp[j][i]+map[j][k]);
                    }
            }
        }
        int ans=0x3f3f3f3f;
        for(int i=2;i<=n;i++)
            ans=min(ans,dp[i][(1<<n)-1]+map[i][1]);
        if(n==1) ans=0;
        printf("%d\n",ans);
    }
    return 0;
}



HDU 5418 TSP(旅行商问题) 模板题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 题目描述: 题目大意就是要你处理这样一个问题:从一个点出发,最后再回到原点,求所走的距离最少,并且要经过所有的城市.题目中给的数据范围很小:n&amp;lt;=16.所以我们可以想想状压DP 先用floyd预处理任意两个点之间的最短距离,为什么呢?因为在这道题中我们要用dp方程dp[... 阅读详情

相关推荐

基于Apache SeaTunnel构建CDC数据同步管道

Apache SeaTunnel是一个数据集成开发平台,其发展经历了几个重要阶段:ETL时代(90年代):面向结构化数据库的数据同步,用于构建数据仓库。MPP和分布式技术流行:使用技术如Hive进行数据仓库的构建。此阶段主要使用mapreduce程序进行数据搬运和转换。数据湖技术流行:重视数据集成,强调先同步数据至数据湖仓储,再进行业务面向的转换和设计。CDC,即变更数据捕获,是一种捕获数据库变更事件(如插入、更新、删除)的技术。

weixin_54625990的博客 2172

hdu 5418 (Floyd+哈密顿) 飞向世界

http://acm.hdu.edu.cn/showproblem.php?pid=5418 题目大意是城市的编号是1到n,给出m条路线,表示从a城市飞到b城市飞机要耗多少油,最后问飞机从1出发飞过所有的的城市最后再回到1最少耗多少油(数据保证至少存在一条这样的路), 要考虑的问题是满足全部连通和保证最短,最短好说,用弗洛伊德或者迪杰特斯拉,至于这个全部连通,一下子连想到了之前的状压搜索,用二...

weixin_30338743的博客 159

ROS机器人全覆盖路径规划实战:6种ipa算法对比与选型指南(附避坑经验)

本文深入对比了ROS中ipa_coverage_planning功能包集成的6种全覆盖路径规划算法,包括牛耕分解、栅格旅行商、神经网络、局部能量最小、轮廓线和凸感知放置。文章从覆盖率、重复率、计算效率、动态避障等核心工程指标出发,提供了基于不同场景(如静态/动态环境、规则/复杂布局)的实战选型指南,并分享了神经网络和局部能量最小等关键算法的参数调优与避坑经验,旨在帮助开发者根据实际需求选择并优化最合适的ipa覆盖算法。

perl8的博客 363

HDU-5418(状压dp+Floyd)

【代码】HDU-5418(状压dp+Floyd)

justhereforstudy的博客 269

AXI backpressure反压机制代码

本文将xilinx的axi读写代码进行修改,实现吞吐量达到50%

m0_64636251的博客 1764

新手必看:SMIC 0.18um PDK安装保姆级教程(附Cadence IC617环境配置)

本文提供SMIC 0.18um PDK在Cadence IC617环境下的详细安装教程,涵盖环境准备、文件解压、安装脚本运行、环境变量配置及Cadence集成验证等关键步骤,特别针对初学者常见问题提供解决方案,助力快速掌握芯片设计工具配置。

weixin_30522183的博客 491

hdu5418 状压dp入门题

题意:n个城市,m条路,求把所有城市都经过后再返回一号点的最短距离 状压dp听上去挺高大上的,其实就是剪枝比较好的枚举,加上dp的思想 先枚举图,然后枚举起点(起点和图不匹配跳过),枚举终点(终点和图或者起点不匹配跳过),然后进行状态转移; 状压dp最强的地方就是能用一个数字去表示一张图的状态(二进制第i位0就是没去过,1就是去过) dp[i][s]表示图为s的时候,人在点i 初始化全最INF,d...

qq_43065776的博客 349

NVIDIA驱动装好了,Gazebo为啥还是卡?手把手教你用optirun搞定GPU加速

本文详细解析了NVIDIA驱动安装后Gazebo仍卡顿的原因,并提供三步精准诊断与GPU加速实战方案。通过optirun快速启用GPU加速,解决OpenGL与显示服务器的配置问题,显著提升仿真性能。适用于ROS、PX4等开发环境,帮助用户充分利用显卡性能。

weixin_30379531的博客 465

hdu 5418 Victor and World【状态压缩】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418题意:从1出发 每个点至少经过一次 最后回到1点的最短路径首先用floyd处理点之间的最短距离 再状压求解代码:#include <stdio.h> #include <ctime> #include <math.h> #include <limits.h> #include <c

mfcheer 727

保姆级教程:在RK3588开发板上编译带MPP硬件加速的FFmpeg(含完整依赖库配置)

本文提供在RK3588开发板上编译支持MPP硬件加速的FFmpeg的详细教程,涵盖交叉编译环境搭建、MPP框架及依赖库配置,最终实现4K视频硬件编解码性能优化。通过实战步骤和性能对比,展示如何充分发挥RK3588的硬件加速能力。

weixin_30839881的博客 418

FineReport实战-- 国内外各地区销售数据分析 多个图表联动

进行国内外各地区业务员销售数据分析是一项复杂但极具价值的任务,它可以帮助企业了解不同市场的表现,并据此调整销售策略以提高整体绩效。实现功能:同一个报表里面多个图表联动问题。

Davina_yu的博客 1198

hdu5418Victor and World(floyd算法+状压dp)

题目链接:点击打开链接 题意描述:有n个城市,从1号城市出发经过所有的城市至少一次,然后再回到1号城市所花费最少的代价? 解题思路: 1、由于每个城市可以经过多次,所以我们先用floyd预处理一下图 2、由于n的范围最大为16,所以考虑状压dp,我们可以把所有城市用一个长度为n的二进制表示,0表示未走过,1表示已经走过 dp[k][i]:表示当前状态为k,以i为终点的路线,所以转移成为为

Crazy_Bear 859

YOLOv13结合Sobel边缘检测算子,实现EIEM(Edge Information Enhancement Module,边缘信息增强模块),强化空间特征提取

EIEM模块通过巧妙地结合Sobel边缘检测算子和现代卷积网络架构,实现了显式边缘信息增强的创新设计。这种方法不仅提高了网络对边缘特征的敏感性,还保持了良好的计算效率和模块化特性。 从技术实现角度看,EIEM展示了如何将经典计算机视觉算法无缝集成到深度学习框架中,为构建更强大、更可解释的视觉模型提供了新的思路。随着对边缘信息重要性认识的不断深入,以及对网络可解释性需求的增长,EIEM这样的显式特征增强模块将在未来的计算机视觉研究中发挥越来越重要的作用。

FJN110的博客 906

hdu 5418 状压dp

#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <cmath> #include <cstring> #include <stack> #include <set> #include <map> #include <vector>using namespace std; #def

点羽染墨 894

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HDU5418

HDU5418 Victor and World 题意:很裸的旅行家问题 思路:旅行家问题裸模板 代码:这里贴三分代码,一份记忆化搜索,一份dp,一份dp的小优化. \\记忆化搜索 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int INF = 0x3f3f3f3f; const int maxn

Mathon 614

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HDU 5418 Victor and World(状态压缩路径DP或+floyd 两种方法 求 玈行商问题)经典

Victor and World Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others) Total Submission(s): 174    Accepted Submission(s): 79 Problem Description After trying h

青山绿水之辈 专栏 1071

HDU - 5418

题目链接:HDU - 5418 状态dp,dp[i][s]为当前在 i 点,然后经过的状态为 s 的最短路。然后Dijkstra即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=17; int n,m,g[N][N],dp[N][1<<N],vis

青烟绕指柔的博客 494

hdu5418--Victor and World(floyd+状压dp)

题目链接:点击打开链接 题目大意:有n个城市。在n个城市之间有m条双向路。每条路有一个距离。如今问从1号城市去游览其他的2到n号城市最后回到1号城市的最短路径(保证1能够直接或间接到达2到n)。(n&lt;=16) 首先用floyd跑出随意一点到其它点最短路。 从n小于等于16就能够看出用状压,从1点開始,dp[i][j]当前经过了i中为1的城市。最后经过的城市是j,不断维护。最后得...

weixin_34261739的博客 159

HDU4337(哈密顿回路)

利用POJ2438的模板写的, 改动不大, 但也算是做了个例题吧(+﹏+)~ #include #include #include #include #include using namespace std; int n,S,T; int ans[200]; int cnt; int mp[200][200]; int vis[200]; void _reverse(int l,int r

iewlhf的博客 655

hdu Free DIY Tour (旅行商问题)

Problem Description Weiwei is a software engineer of ShiningSoft. He has just excellently fulfilled a software project with his fellow workers. His boss is so satisfied with their job that he decide

steamqueen的专栏 776

hdu5418--Victor and World(最短路径+状压dp)

题目链接 题目大意: 维克多现在在一个数字是1的国家,他想知道他访问每个国家至少一次并最终返回第一个国家的最低燃料量。 解题思路: 我是初学状压dp看视频的时候知道了这题,在视频中其实已经差不多把这题差不多讲明白了,首先用二进制数表示城市的状态,如果上一个城市是已经走过的状态,这个城市才能由上一个状态转移过来,唯一要注意的就是最短路了,挺久没写最短路,都有点忘了。 代码: #include<bits/stdc++.h> #define pb emplace_back // #define

qq_43697256的博客 306

hdu 5418 哈密顿+floyd

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 题意:从1开始,走过所有的点(可以走多次),再回到1,求最短路径 思路:先floyd,求任意两点间最短路,然后求哈密顿回路最短的 代码: #include #include #include #include #include #include #include #includ

黑山老猴妖的专栏 1669

HDU5418 动态规划 状压DP

题意: 可多次拜访的类TSP问题。 思路: 状态转移方程:dp[s][v]=min(dp[s|{u}][u]+mp[u][v]) (u不属于s) 反思: 一个月没写代码,手都生疏了。五月份要加油!!! 代码:#include <cstdio> #include <vector> #include <cmath> #include <cstring> #include <iostream

ACUNSTOPPABLE 335

hdu5418

package algorithm; import java.util.Scanner; public class test { public static int T,n,m,w,u,v,G[][],dp[][],INF=(1<<30)-1; public static void floyd() { for(int k=1;k<=n;++k) { G[k][k...

lpls1 240

ZOJ 1425 Crossed Matchings(动态规划)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1425 Crossed Matchings Time Limit: 2 Seconds      Memory Limit: 65536 KB There are two rows of positive integer numbers. W

hellohelloC的博客 1183
上一篇: Codeforces 543A. Writing Code DP
下一篇: HDU 3664 Permutation Counting (DP)
hellohelloC
博客等级 码龄12年 15粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值