HDU 3001--Travelling(状态压缩+tsp)

HDU-3001(旅行商问题+三进制状压dp) 【代码】HDU-3001(旅行商问题+三进制状压dp) 阅读详情

来源:http://acm.hdu.edu.cn/showproblem.php?pid=3001

题意:n个点,m个边,求遍历所有边的最短路径,并且每点最多访问两次。

分析:很经典的TSP问题,但是题目又有改变,每个旅游地可以走两遍,故进行扩展2状态的状态压缩DP伸展为3状态的状态压缩问题。0表示没去过此点,1 表示去过一次,2表示去过两次,状态转移方程基本和以前一样dp[i][j]=min(dp[i][k]+map[k][j])。

#include<iostream>
#include<algorithm>
#include<iomanip>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
#include<queue>
#include<set>
#define inf 0x1f1f1f1f
#define min(a,b) (a) < (b) ? (a) : (b)
using namespace std;

int n,m;
int tri[12] = {0,1,3,9,27,81,243,729,2187,6561,19683,59049};
int digit[59050][11];
int map[11][11],dp[59050][11];

int main()
{
    for(int i=0;i<59050;i++)
    {
        int t=i;
        for(int j=1;j<=10;j++)
        {
            digit[i][j]=t%3;
            t/=3;
            if(t==0)
                break;
        }
    }

    while(cin>>n>>m)
    {
        memset(map,inf,sizeof(map));
        int a,b,c;
        while(m--)
        {
            scanf("%d%d%d",&a,&b,&c);
            if(c<map[a][b])
                map[a][b]=map[b][a]=c;
        }
        memset(dp,inf,sizeof(dp));
        for(int i=1;i<=n;i++)
            dp[tri[i]][i]=0;
        int ans=inf;
        for(int s=0;s<tri[n+1];s++)
        {
            int flag=1;
            for(int i=1;i<=n;i++)
            {
                if(digit[s][i]==0)
                    flag = 0;
                if(dp[s][i]==inf)
                    continue;
                for(int j=1;j<=n;j++)
                {
                    if(i==j)
                        continue;
                    if(map[i][j]==inf||digit[s][j]>= 2)
                        continue;
                    int news=s+tri[j];
                    dp[news][j]=min(dp[news][j],dp[s][i]+map[i][j]);
                }
            }
            if(flag)
            {
                for(int j=1;j<=n;j++)
                    ans=min(ans,dp[s][j]);
            }
        }
        if(ans==inf)
        {
            puts("-1");
            continue;
        }
        printf("%d\n",ans);
    }
    return 0;
}


 

嵌入式工程师必看:BLDC电机驱动电路设计全流程(附MOS管选型指南) 本文为嵌入式工程师提供了BLDC电机驱动电路设计的全流程实战指南。文章深入解析了三相全桥逆变电路的核心原理,并重点阐述了功率MOSFET的选型关键参数,如Vds、Rds(on)和Qg。同时,详细介绍了栅极驱动设计、PCB布局布线要点及调试安全步骤,旨在帮助开发者构建稳定高效的BLDC驱动系统。 阅读详情

相关推荐

【PyTorch版本兼容性指南】如何在不同版本中正确使用torch.nn.attention

本文详细解析了PyTorch版本兼容性问题,特别是torch.nn.attention模块在不同版本中的使用差异。针对常见的ModuleNotFoundError错误,提供了三种实用解决方案:升级PyTorch版本、使用自定义实现和源码移植方案,并分享了最佳实践建议,帮助开发者有效避免兼容性问题。

weixin_29084231的博客 472

hdu3001(三进制状态压缩DP)

这题和TSP(旅行售货员问题)本质区别是每个地方可以访问两下,而TSP只能访问一次,一开始题目读错了,用搜索来做结果wa了 后来看了解题,这个问题要用状态压缩来解

u013509299的专栏 751

用Multisim和AD2复刻经典:手把手教你搭建μA741三角波-方波发生器(附完整避坑指南)

本文详细介绍了如何使用Multisim和AD2搭建基于μA741运算放大器的三角波-方波发生器,包括电路原理、Multisim仿真流程、AD2硬件搭建及调试技巧。通过对比理论计算、仿真和实测数据,深入分析器件非理想特性的影响,并提供16个典型问题的解决方案,帮助读者掌握波形发生器的设计原理和工程调试经验。

weixin_28744423的博客 284

【HDU 3001】三进制压缩

1.题目链接。题目大意和哈密顿回路是一个意思,但是这里条件改变了一下,就是每个点最少访问一次,最多访问两次。那么我们使用二进制就无法再压缩这个状态,因为二进制只能表示访问过或者没有访问过,所以不能继续使用二进制,但是我们依然可以使用压缩的思想。这时我们就可以使用三个数来压缩这个状态,0,1,2表示访问了一次,两次,或者没有访问过。然后我们需要预处理一个信息:dig[i][j]表示状态为i的时候,第...

YG爱木木 310

从零到一:用STM32 FOC算法驯服无刷电机的艺术

本文详细介绍了如何使用STM32和FOC算法实现无刷电机的高性能控制。从硬件搭建、参数识别到闭环调节,一步步解析FOC算法的核心原理与调优技巧,帮助开发者掌握电机控制的关键技术,实现从零到一的精准驯服。

kkk56的博客 919

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置

当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速...

weixin_39524048的博客 1784

刷题记录:HDU - 3001Travelling

刷题记录:HDU - 3001Travelling

yingjiayu12的博客 378

基于STM32L4XX、HAL库的RTL8201F 以太网收发器(PHY)驱动程序设计

define PHY_RESET_DELAY 1000 // PHY复位延迟(ms)#define PHY_AUTONEGO_DELAY 3000 // 自动协商延迟(ms)/* 检查PHY ID (RTL8201F的ID为0x001CC816) *//* 系统时钟配置,确保ETH有50MHz时钟 *//* 初始化CPU, AHB和APB总线时钟 */

zhusl6688的博客 813

HDU - 3001(三进制 状态压缩dp)

题目:click 题目:给定m条路,每个点不能走过超过2次,走完n个点最小花费。 n的范围很小,走完n个点的路有很多条,可以枚举起点或者终点作为一个状态,由于每个点的次数不超过2,三进制状态压缩。 #include<cmath> #include<iostream> #include<cstdio> #include<cstring> #includ...

weixin_43958964的博客 499

【Altium designer】BOM导出 Bill of Materials 如何自定义格式

【Altium designer】如何自定义BOM导出格式 我们用Excel做一个xx.xlt的2003的模版文件,取文件名为:AltiumDesiger PCB BOM Template.xlt 将AltiumDesiger PCB BOM Template.xlt文件存放在:AltiumDesiger 安装目录的Template文件夹内

夜半少年的博客 2717

笔试题-2023-乐鑫-数字IC设计【纯净题目版】

笔试题-2023-乐鑫-数字IC设计【纯净题目版】

w0shishabi的博客 1779

hdu3001——Travelling 三进制TSP, 状态压缩

Travelling Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4106    Accepted Submission(s): 1310 Problem Description After coding so man

Alex 1170

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Travelling HDU - 3001 三进制状态压缩 tsp问题

After coding so many days,Mr Acmer wants to have a good rest.So travelling is the best choice!He has decided to visit n cities(he insists on seeing all the cities!And he does not mind which city being...

weixin_41544329的博客 186

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

HDU 3001 Travelling (状态压缩DP +TSP问题)

Problem Description After coding so many days,Mr Acmer wants to have a good rest.So travelling is the best choice!He has decided to visit n cities(he insists on seeing all the cities!And he does no

know_heng的博客 345

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDU 3001 Travelling (状态压缩/三进制)

Travelling(HDU 3001) Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8931 Accepted Submission(s): 2914 Problem Description After coding ...

爱玲姐姐的博客 870

hdu 3001 Travelling (TSP问题,状压dp)

After coding so many days,Mr Acmer wants to have a good rest.So travelling is the best choice!He has decided to visit n cities(he insists on seeing all the cities!And he does not mind which city being

Vision 1373

HDU3001 Travelling

状压DP TSP

a free man 554

HDU3001——Travelling(状态压缩DP)

Travelling Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2393    Accepted Submission(s): 692 Problem Description After coding so many

JIA_char 617

HDU 3001 Travelling

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题意:有n个城市,有一个人想全部逛一遍,但是每个城市最多经过两次,他可以从任意一个城市出发,问最小消费。 思路:三进制TSP的状态压缩DP。先预处理出来状态S对应的每一位的值。然后枚举状态以及当前在的城市编号和上一个所在的城市。 #include #inclu

DS-K的博客 324

HDU 3001 - Travelling TSP

http://acm.hdu.edu.cn/showproblem.php?pid=3001#include #include #include #include #include #include using namespace std; template _T Max(_T a , _T b){ return (a>b)?(a):(b); } template _T Max

生命有一种绝对 796

HDU-3001 Travelling

题目: http://acm.hdu.edu.cn/showproblem.php?pid=3001 题意: TSP问题,最多10个点,给出之间的路线长度,求遍历的最短总路径长。 思路: 状压DP,注意是每个点不能拜访超过两次,所以是三进制状压。 dp[i+pos[k]][k] = min(dp[i+pos[k]][k], dp[i][j]+g[j][k]); dp[i][j]表

MyWorld 1184

hdu3001 Travelling(TSP+三进制)

题目链接:点这里!!! 题意: 给你n(n 题解: 你可以可以利用三进制表示这个点你经过了几次,在加上基础的TSP就可以解决了!!! 代码: #include #include #include #include #include #include #include #include #include #include #include #include #in

Zsss的博客 379

HDU 3001 Travelling:TSP(旅行商)【节点最多经过2次】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题意:   有n个城市,m条双向道路,每条道路走一次需要花费路费v。你可以将任意一个城市作为起点出发,然后遍历每一个城市,并保证同一个城市最多经过2次。问你遍历这些城市的最小费用是多少。 题解:   传统的TSP问题中,每个城市只能经过一次,做法为三重for循环,分别枚举...

a1392136的博客 277

HDU 3001 Travelling(状压dp)

Travelling Time Limit: 6000/3000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11033Accepted Submission(s): 3484 Problem Description After coding so many ...

LSD20164388的博客 302
上一篇: HDU 1847--Good Luck in CET-4 Everybody!
下一篇: HDU 4003--Find Metal Mineral(树形dp)
Xcockroach
博客等级 码龄14年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值