题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067

题意:

  给你一个n*m的地图,地图上标着对应位置的石子数。你从左上角出发,每次可以向上下左右四个方向移动。你要遍历所有有石子的地方,并返回起点。问你最少的移动步数。

题解:

  简化问题:

    只保留起点和有石子的点,预处理出保留点两两之间的最短路(曼哈顿距离),将矩阵转化为一个无向图。

    原题变为了TSP模板题。

  然后套模板就好了。。。

  三重for循环,分别枚举state、当前位置i、下一步位置j。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX_N 55
#define MAX_S (1<<15)
#define INF 10000000 using namespace std; int n,m;
int cnt;
int ans;
int x[MAX_N];
int y[MAX_N];
int dis[MAX_N][MAX_N];
int dp[MAX_S][MAX_N]; void read()
{
cnt=;
int temp;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
cin>>temp;
if(temp> || (i== && j==))
{
x[cnt]=i;
y[cnt]=j;
cnt++;
}
}
}
} void cal_dis()
{
for(int i=;i<cnt;i++)
{
for(int j=;j<cnt;j++)
{
dis[i][j]=fabs(x[i]-x[j])+fabs(y[i]-y[j]);
}
}
} void solve()
{
cal_dis();
memset(dp,-,sizeof(dp));
dp[][]=;
for(int state=;state<(<<cnt);state++)
{
for(int i=;i<cnt;i++)
{
if(dp[state][i]!=-)
{
for(int j=;j<cnt;j++)
{
if( !((state>>j)&) && (dp[state|(<<j)][j]==- || dp[state|(<<j)][j]>dp[state][i]+dis[i][j]) )
{
dp[state|(<<j)][j]=dp[state][i]+dis[i][j];
}
}
}
}
}
ans=INF;
for(int i=;i<cnt;i++)
{
if(dp[(<<cnt)-][i]!=-) ans=min(ans,dp[(<<cnt)-][i]+dis[i][]);
}
} void print()
{
cout<<ans<<endl;
} int main()
{
while(cin>>n>>m)
{
read();
solve();
print();
}
}

HDU 5067 Harry And Dig Machine:TSP(旅行商)的更多相关文章

  1. HDU 5067 Harry And Dig Machine(状压dp)

    HDU 5067 Harry And Dig Machine 思路:因为点才10个,在加上一个起点,处理出每一个点之间的曼哈顿距离,然后用状压dp搞,状态表示为: dp[i][s],表示在i位置.走过 ...

  2. HDU 5067 Harry And Dig Machine(状压DP)(TSP问题)

    题目地址:pid=5067">HDU 5067 经典的TSP旅行商问题模型. 状压DP. 先分别预处理出来每两个石子堆的距离.然后将题目转化成10个城市每一个城市至少经过一次的最短时间 ...

  3. hdu 5067 Harry And Dig Machine (状态压缩dp)

    题目链接 bc上的一道题,刚开始想用这个方法做的,因为刚刚做了一个类似的题,但是想到这只是bc的第二题, 以为用bfs水一下就过去了,结果MLE了,因为bfs的队列里的状态太多了,耗内存太厉害. 题意 ...

  4. hdu 5067 Harry And Dig Machine

    http://acm.hdu.edu.cn/showproblem.php?pid=5067 思路:问题可以转化成:从某一点出发,遍历网格上的一些点,每个点至少访问一次需要的最小时间是多少.这就是经典 ...

  5. hdu5067Harry And Dig Machine(TSP旅行商问题)

    题目链接: huangjing 题意:给出一幅图.图中有一些点,然后从第1个点出发,然后途径全部有石头的点.最后回到原点,然后求最小距离.当初作比赛的时候不知道这就是旅行商经典问题.回来学了一下. 思 ...

  6. BestCoder Round #14 B 称号 Harry And Dig Machine 【TSP】

    称号:Harry And Dig Machine 哈哈  最终涨边粉色了,不easy呀.顺便写一道题解吧 题意:给一个m*n的矩阵,然后当中最多由10个有值,求总左上角把全部的值都拿上回到左上角的最小 ...

  7. HDU - 5067 / HDU - 5418 TSP

    集合表示多用[0,n)表示方法 HDU - 5067 经典TSP,每个顶点恰经过一次最优 #include<bits/stdc++.h> #define rep(i,j,k) for(in ...

  8. HDU 5067-Harry And Dig Machine(DFS)

    Harry And Dig Machine Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  9. hdu 5067 遍历指定点集最小时间

    http://acm.hdu.edu.cn/showproblem.php?pid=5067 贴题解 由于Harry的dig machine是无限大的,而装载石头和卸载石头是不费时间的,所以问题可以转 ...

随机推荐

  1. ArrayList原理解析

    简介 ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处 有图有码 图 ...

  2. 懒人的小技巧, 批处理修改IP

    相信很多人都有这样的麻烦, 工作单位的IP网段与住的不一致, 自己的笔记本在单位和回家的时候每次都要更改IP, 很麻烦,  偷个懒, 做了个批处理来修改IP,方便一点. 还有就是可以把工作的时候才需要 ...

  3. Tkinter开发第一个桌面程序HelloWorld

    在Python3中是tkinter,Python2中是Tkinter Tkinter是Python 官方承认的标准 GUI 方案(de-facto standard),因为是Python自带安装,决定 ...

  4. Java基础语法<九> 接口与内部类

    1 接口  interface implement 接口的所有方法自动地属于public.因此,在接口中声明方法时,不必提供关键字public.   接口可以包含多个方法,接口中可以定义常量.接口中的 ...

  5. Sass学习笔记(补充)

    阅读目录 1. Sass和SCSS的区别 2. @while循环 3. @at-root 4. @content 5. 凸显注释 6. CSS输出样式 7. 重置浏览器样式 8. Sass调试和@de ...

  6. 008.Adding a model to an ASP.NET Core MVC app --【在 asp.net core mvc 中添加一个model (模型)】

    Adding a model to an ASP.NET Core MVC app在 asp.net core mvc 中添加一个model (模型)2017-3-30 8 分钟阅读时长 本文内容1. ...

  7. CentOS的改变系统启动级别

    CentOS7改变系统启动级别   systemctl命令:   文本模式:systemctl set-default multi-user.target 图形模式:systemctl set-def ...

  8. Python基础之常用模块(三)

    1.configparser模块 该模块是用来对文件进行读写操作,适用于格式与Windows ini 文件类似的文件,可以包含一个或多个节(section),每个节可以有多个参数(键值对) 配置文件的 ...

  9. 决策树(C4.5)原理

    决策树c4.5算法是在决策树ID3上面演变而来. 在ID3中: 信息增益 按属性A划分数据集S的信息增益Gain(S,A)为样本集S的熵减去按属性A划分S后的样本子集的熵,即 在此基础上,C4.5计算 ...

  10. NLP —— 图模型(二)条件随机场(Conditional random field,CRF)

    本文简单整理了以下内容: (一)马尔可夫随机场(Markov random field,无向图模型)简单回顾 (二)条件随机场(Conditional random field,CRF) 这篇写的非常 ...