HDU 5067
http://acm.hdu.edu.cn/showproblem.php?pid=5067
规定起点和终点的tsp问题,解法依然是状态压缩dp,在初始化和计算答案的时候略做改动即可
#include <iostream>
#include <cstdio>
#include <map>
#include <cstring> using namespace std ; const int INF=0xfffffff ; int n,m ; int M[][] ;
int dis[][] ;
int dp[<<][] ;
int ABS(int x){return x>?x:-x ;} struct point
{
int x,y ;
}p[] ; int cal(point a,point b)
{
return ABS(a.x-b.x)+ABS(a.y-b.y) ;
} int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i= ;i<n ;i++)
{
for(int j= ;j<m ;j++)
{
scanf("%d",&M[i][j]) ;
}
}
int cnt= ;
for(int i= ;i<n ;i++)
{
for(int j= ;j<m ;j++)
{
if(i== && j==)continue ;
if(M[i][j])
{
p[cnt].x=i ;
p[cnt++].y=j ;
}
}
}
for(int i= ;i< ;i++)
for(int j= ;j< ;j++)
dis[i][j]=INF ;
for(int i= ;i<cnt ;i++)
{
for(int j= ;j<cnt ;j++)
{
if(i==j)
{
dis[i][j]= ;
continue ;
}
dis[i][j]=cal(p[i],p[j]) ;
}
}
point s ;
s.x= ;s.y= ;
for(int i= ;i<(<<) ;i++)
for(int j= ;j< ;j++)
dp[i][j]=INF ;
for(int i= ;i<cnt ;i++)
{
dp[<<i][i]=cal(s,p[i]) ;
}
for(int i= ;i<(<<cnt) ;i++)
{
for(int j= ;j<cnt ;j++)
{
if(i&(<<j))
{
for(int k= ;k<cnt ;k++)
{
if(dis[k][j]==INF || !(i&(<<k)))continue ;
dp[i][j]=min(dp[i][j],dp[i^(<<j)][k]+dis[k][j]) ;
}
}
}
}
int ans=INF ;
for(int i= ;i<cnt ;i++)
{
ans=min(ans,dp[(<<cnt)-][i]+cal(p[i],s)) ;
}
if(ans==INF)
{
puts("") ;
continue ;
}
printf("%d\n",ans) ;
}
return ;
}
HDU 5067的更多相关文章
- HDU 5067 Harry And Dig Machine(状压DP)(TSP问题)
题目地址:pid=5067">HDU 5067 经典的TSP旅行商问题模型. 状压DP. 先分别预处理出来每两个石子堆的距离.然后将题目转化成10个城市每一个城市至少经过一次的最短时间 ...
- HDU - 5067 / HDU - 5418 TSP
集合表示多用[0,n)表示方法 HDU - 5067 经典TSP,每个顶点恰经过一次最优 #include<bits/stdc++.h> #define rep(i,j,k) for(in ...
- HDU 5067 Harry And Dig Machine(状压dp)
HDU 5067 Harry And Dig Machine 思路:因为点才10个,在加上一个起点,处理出每一个点之间的曼哈顿距离,然后用状压dp搞,状态表示为: dp[i][s],表示在i位置.走过 ...
- BestCoder14 1002.Harry And Dig Machine(hdu 5067) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目意思:给出一个 n * m 的方格,每一个小方格(大小为1*1)的值要么为 0 要么为一个正 ...
- HDU 5067 (状态压缩DP+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目大意:蓝翔挖掘机挖石子.把地图上所有石子都运回起点,问最少耗时. 解题思路: 首先得YY出 ...
- hdu 5067 Harry And Dig Machine
http://acm.hdu.edu.cn/showproblem.php?pid=5067 思路:问题可以转化成:从某一点出发,遍历网格上的一些点,每个点至少访问一次需要的最小时间是多少.这就是经典 ...
- HDU 5067 Harry And Dig Machine:TSP(旅行商)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 题意: 给你一个n*m的地图,地图上标着对应位置的石子数.你从左上角出发,每次可以向上下左右四个 ...
- hdu 5067 遍历指定点集最小时间
http://acm.hdu.edu.cn/showproblem.php?pid=5067 贴题解 由于Harry的dig machine是无限大的,而装载石头和卸载石头是不费时间的,所以问题可以转 ...
- hdu 5067 Harry And Dig Machine (状态压缩dp)
题目链接 bc上的一道题,刚开始想用这个方法做的,因为刚刚做了一个类似的题,但是想到这只是bc的第二题, 以为用bfs水一下就过去了,结果MLE了,因为bfs的队列里的状态太多了,耗内存太厉害. 题意 ...
随机推荐
- C#运算除法和求整
在C#与法中,“/”除后所得的值的类型,跟他的除数和被除数的类型有关.如: int a=4; int b=5 ...
- #ifdef __cplusplus extern "C"
#ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif首先,__cplusplus是cp ...
- WebAPI用法
ASP.NET Web API(一):使用初探,GET和POST数据[Parry] HttpClient + ASP.NET Web API, WCF之外的另一个选择[dudu] 通过这两篇文章让我了 ...
- Linux CC攻击脚本
CC(ChallengeCollapsar)主要是用来攻击页面的.大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库 ...
- 介绍开源的.net通信框架NetworkComms
Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地址是:https://github.com/MarcFletcher/ ...
- 使用Parallel
Parallel是.net framework为我们封装的用于并行的静态类,它使用起来简单灵活.它为我们提供了三个方法,分别是Invoke,For和ForEach.下面来进行分别演示. Paralle ...
- jquery之getJSON方法获取中文数据乱码解决方法
最近公司做的东西要用到js,感觉js太繁琐,所以自己学起了jquery,发现jquery确实强大.在学到jquery ajax的时候(用的工具是eclipse),发现$.getJSON()方法请求服务 ...
- 转: Div与table的区别
1:速度和加载方式方面的区别 div 和 table 的差异不是速度,而是加载方式,速度只能是指网络速度,如果速度足够快,是没有差异的: div 的加载方式是即读即加载,遇到 <div> ...
- bzoj 2326: [HNOI2011]数学作业
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...
- POJ 2482 扫描线(面积覆盖最大次数)
Stars in Your Window Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10806 Accepted: ...