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 ...
随机推荐
- java的环境配置
java的安装 1,进入官网 https://www.oracle.com/index.html 2.Menu -> Downloads -> java -> all Java ...
- 学习笔记:ECharts
(Highcharts 167K: ECharts 354K: jqChart 240K),如果用于网络,Highchart最小 ECharts (Enterprise Charts 商业产品图表库 ...
- win7、centos7 双系统安装总结
centos7安装过程 问题:TroubleShooting选项进入图形化界面安装才成功. win7恢复引导区 问题:安装完Centos后,win7的引导区不见了 具体恢复过程:http://www. ...
- leetcode234
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...
- [原]vue中各模块的实际引用
检查发现: 1.vue实际引用文件配置位置 alias: { 'vue$': 'vue/dist/vue.esm.js', 此位置替换了vue包内的package.json中定义的位置 } 2.vue ...
- SQL(ORACLE)
查询数据库编码: select * from sys.nls_database_parameters;select * from sys.nls_session_parameters; replace ...
- C# WinForm窗体及其控件的自适应
3步骤: 1.在需要自适应的Form中实例化全局变量 AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...
- ubuntu开启远程shell,开启上传下载
需要先安装openshell-server 具体命令如下: 1.先更新下源 sudo apt-get update 2.安装openshell-server sudo apt-get install ...
- linux nginx 基本用法
nginx -s reload -p <nginx环境目录> -c <指定的配置文件> 其中-p -c 为可选,不写为默认路径和配置 在执行命令之前可通过 nginx -t - ...
- cdnbest节点动态ip配置教程
1.安装节点后,在未初始化里初始化节点,如下图操作,要选择动态ip(注:动态ip节点不支持添加辅ip) 服务器如果是动态ip,选择了动态ip选项,节点在自动更换了新的ip后,在节点列表里的ip和dns ...