参考了别人的代码   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. git 第一次提交代码

    git init git add README.md git commit -m "first commit" git remote add origin https://git. ...

  2. Spring MVC 之 请求url 带后缀的情况

    RequestMappingInfoHandlerMapping 在处理http请求的时候, 如果 请求url 有后缀,如果找不到精确匹配的那个@RequestMapping方法.那么,就把后缀去掉, ...

  3. leetcode19

    class Solution { public: ; ; ListNode* removeNthFromEnd(ListNode* head, int n) { ; ListNode* node = ...

  4. LeetCode OJ 129. Sum Root to Leaf Numbers

    题目 Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a num ...

  5. indexOf() 如何判断一个元素在指定数组中是否存在? 找出指定元素出现的所有位置? indexOf()方法 是正序查找,lastIndexOf()是倒叙查找

    indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1. let a = [2, 9, 7, 8, 9]; a.indexOf(2); // 0 a.indexOf ...

  6. 吴裕雄 python深度学习与实践(10)

    import tensorflow as tf input1 = tf.constant(1) print(input1) input2 = tf.Variable(2,tf.int32) print ...

  7. vue单页面处理SEO问题

    设置vue 单页面meta info信息 vue-meta-info,(https://github.com/muwoo/vue-meta-info)如果需要单页面SEO,可以和 prerender- ...

  8. netty(二) 创建一个netty服务端和客户端

    服务端 NettyServer package com.zw.netty.config; import com.zw.netty.channel.ServerInitializer;import io ...

  9. FortiGate 5.2/5.4 SSLVPN建立

    1.定义源IP池 即用户通过sslvpn拨号成功后获取到的IP地址. 2.定义路由地址 即用户通过sslvpn拨号成功后允许获取到的路由表. 3.建立sslvpn portal 4.定义用户和用户组 ...

  10. ROLAP、MOLAP和HOLAP区别

    对没有使用过数据仓库的人,对这三个概念确实是有点混淆不清.包括我自己本身不是做数据仓库出身,所以实际上是从实践出发,理论基础是有点匮乏的. 一.基本概念 1. OLAP OLAP(on-Line An ...