hdu3001Travelling
参考了别人的代码 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的更多相关文章
- hdu3001 Travelling
Travelling Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
随机推荐
- 【JVM底层策略 一】GC roots如何判断对象不可达
查找内存中不再使用的对象 引用计数法 引用计数法就是如果一个对象没有被任何引用指向,则可视之为垃圾.这种方法的缺点就是不能检测到环的存在. 2.根搜索算法 根搜索算法的基本思路就是通过一系列名为”GC ...
- spring 之 注入之 by name or by type, or both ?
@Autowired 和 @Qualifier 使用xml 注入的时候, 我们可以指定 autowire=“byType” 或“byName” . 但是使用 注解的时候, @Autowired 只 ...
- background-position,有逗号和没逗号:截然不同的结果
写星级评分demo的时候,发现background-position这个属性有点神奇 如上图,在其值中加“,”与不加“,”会带来截然不同的结果,来研究一哈,顺便把这个属性复习一下 1.backgrou ...
- leetcode207
拓扑排序问题. class Solution { public: bool canFinish(int numCourses, vector<pair<int, int>>&a ...
- C# 委托和泛型
委托定义: 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有 ...
- python 爬虫启航
1. 使用excel(简单使用) 数据- 自网站-导入 2.you-get python爬虫入门 1.环境配置 python,request,lxml 2.原理 爬虫的框架如下: 1.挑选种子URL: ...
- vue项目中使用axios上传图片等文件
form表单提交图片会刷新页面,也可以时form绑定到一个隐藏的iframe上,可以实现无刷新提交数据. html代码: <input name="file" type=&q ...
- as3:sprite作为容器使用时,最好不要指定width,height
除 TextField 和 Video 对象以外,没有内容的显示对象(如一个空的 Sprite)的高度为 0,即使您尝试将 height 设置为其它值,也是这样. 如果您设置了 height 属性,则 ...
- OpenJudge NOI 4976 硬币
http://noi.openjudge.cn/ch0207/4976/ 描述 宇航员Bob有一天来到火星上,他有收集硬币的习惯.于是他将火星上所有面值的硬币都收集起来了,一共有n种,每种只有一个:面 ...
- DRF的解析器和渲染器
解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...