参考了别人的代码   https://blog.csdn.net/u010372095/article/details/38474721

深感自己的弱小

这是tsp问题,和基本的tsp问题没什么大的区别,唯一的区别就是采用了三进制

原来的二进制的某一位只能表示到达或没到达过,现在加了三进制,就能表示到达过几次了

tsp问题网上的讲解我推荐这一篇    http://www.360doc.com/content/17/0826/11/36546539_682232069.shtml

我个人感觉讲的算是很详细了,剩下的就是代码实现了。

#include<iostream>
#include<queue>
#include<cstring>
#include<vector>
#include<cstdio>
#include<cmath>
#include<map>
#include<string>
using namespace std;
#define ll long long
#define se second
#define fi first
#define oo 0x3fffffff
int n,m;
int dp[][];
int dis[][];
int three[];
int in[];
int tothree(int n);
int main()
{
in[] = ;
for(int i = ; i <= ; ++i)
in[i] = in[i-]*; while(scanf("%d%d",&n,&m) != EOF)
{
for(int i = ; i < n; ++i)
{
for(int j = ; j < in[n]; ++j)
dp[i][j] = -;
for(int j = ; j < n; ++j)
dis[i][j] = -;
}
//cout << 1 << endl;
for(int i = ; i < m; ++i)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
a --; b --;
if(dis[a][b] == -)
dis[a][b] = dis[b][a] = c;
else
dis[a][b] = dis[b][a] = min(dis[a][b],c);
} int minn = -;
for(int l = ; l < in[n]; ++l)
{
int k = tothree(l);
for(int i = ; i < n; ++i)
{
if(three[i])
{
if(k == )
dp[i][l] = ;
if(dp[i][l] == -)
continue;
if(k == n)
{
if(minn == -) minn = dp[i][l];
else minn = min(minn,dp[i][l]);
} for(int j = ; j < n; ++j)
if(i != j && three[j] < && dis[i][j] != -)
{
int tog = l + in[j];
if(dp[j][tog] == -)
dp[j][tog] = dp[i][l] + dis[i][j];
else
dp[j][tog] = min(dp[j][tog],dp[i][l] + dis[i][j]);
}
}
}
}
printf("%d\n",minn);
}
}
int tothree(int n)
{
int k = ;
for(int i = ; i < ; ++i)
{
three[i] = n%; n/=; if(three[i]) k++;
}
return k;
}

hdu3001Travelling的更多相关文章

  1. hdu3001 Travelling

    Travelling Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. Python全栈开发记录_第一篇(循环练习及杂碎的知识点)

    Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看.(该篇代码行数大约:300行) 知识点1:优先级:not>and 短路原则:a ...

  2. Ubuntu16.04下修改MySQL数据的默认存储位置

    由于在Linux下MySQL默认是存储在/var/lib/mysql目录下,mysql的数据会非常大,由于/var所划分的空间不够大,所以我们需要将mysql数据存放路径修改一下,放到大分区里面,以便 ...

  3. cookie与session的区别是什么

    cookie与session的区别有:cookie以文本格式存储在浏览器上,存储量有限:而会话存储在服务端,可以无限量存储多个变量并且比cookie更安全 在php中可以指定站点的访问者信息存储在se ...

  4. threading join用法

    join():在子线程完成运行之前,这个子线程的父线程将一直被阻塞 import threading #线程import time def Beijing(n): print('Beijing tim ...

  5. SpringBoot 试手(简易的SpringBoot搭建步骤)

    SpringBoot 也算AI吧,它根据您架构中引用的依赖,自动化地按默认方案帮您完成了Spring那些复杂繁琐的配置工作.为了让您不会看低此 AI 水平,还特地喊出了“约定大于配置”的口号.从这个角 ...

  6. 页面JS实现按钮点击增加输入框

    学习记录 https://www.tuicool.com/articles/byUf2qe

  7. C#之SByte

    int8 C#中,byte为无符号8位整数,而Sbyte为有符号8位整数,对应java中的byte类型. 方法一将 byte 转为 sbyte.原理很简单,就是当 byte 小于 128 时其值保持不 ...

  8. 186. Reverse Words in a String II 翻转有空格的单词串 里面不变

    [抄题]: Given an input string , reverse the string word by word. Example: Input: ["t"," ...

  9. journalctl 清理journal日志

    在CentOS 7开始使用的systemd使用了journal日志,这个日志的管理方式和以往使用syslog的方式不同,可以通过管理工具维护. 使用df -h检查磁盘文件,可以看到/run目录下有日志 ...

  10. 对于PHP面试知识点的小结

    基础篇 了解大部分数组处理函数 字符串处理函数(区别 mb_ 系列函数) & 引用,结合案例分析 == 与 === 区别 isset 与 empty 区别 全部魔术函数理解 static.$t ...