HDU 4856
http://acm.hdu.edu.cn/showproblem.php?pid=4856
西安邀请赛的一道题,这道题我们当时在现场最后1h才发现时状态压缩dp,惊险写出
现在回头想发现当时有点呆,这种明显tsp模型的题目当时鬼迷心窍去写搜索,超时而不知悔改,实际是水题一道
#include <iostream>
#include <map>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std ;
const int INF=0xfffffff ;
int n,m ; char M[][] ;
int vis[][] ;
int dis[][] ;
int dx[]={,-,,} ;
int dy[]={,,,-} ;
int dp[][<<] ;//在管道i时,状态为s struct node
{
int x1,y1,x2,y2 ;
}kk[] ;
struct point
{
int x,y,step ;
} ;
int bfs(node a,node b)
{
memset(vis,,sizeof(vis)) ;
queue <point> q ;
point s ;
s.x=a.x2 ;s.y=a.y2 ;s.step= ;
vis[s.x][s.y]= ;
q.push(s) ;
while(!q.empty())
{
point u=q.front() ;
q.pop() ;
if(u.x==b.x1 && u.y==b.y1)
{
return u.step ;
}
for(int i= ;i< ;i++)
{
int xx=u.x+dx[i] ;
int yy=u.y+dy[i] ;
if(xx< || xx>=n || yy< || yy>=n)continue ;
if(M[xx][yy]=='#')continue ;
if(vis[xx][yy])continue ;
vis[xx][yy]= ;
point next ;
next.x=xx ;next.y=yy ;next.step=u.step+ ;
q.push(next) ;
}
}
return INF ;
}
void INIT()
{
for(int i= ;i< ;i++)
for(int j= ;j< ;j++)
dis[i][j]=INF ;
for(int i= ;i<m ;i++)
{
for(int j= ;j<m ;j++)
{
if(i==j)
{
dis[i][j]= ;
continue ;
}
dis[i][j]=bfs(kk[i],kk[j]) ;
}
}
} int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i= ;i<n ;i++)
scanf("%s",M[i]) ;
for(int i= ;i<m ;i++)
{
scanf("%d%d%d%d",&kk[i].x1,&kk[i].y1,&kk[i].x2,&kk[i].y2) ;
kk[i].x1-- ;kk[i].y1-- ;kk[i].x2-- ;kk[i].y2-- ;
}
INIT() ;
for(int i= ;i< ;i++)
for(int j= ;j<(<<) ;j++)
dp[i][j]=INF ;
for(int i= ;i<m ;i++)dp[i][<<i]= ;
int ans=INF ;
for(int i= ;i<(<<m) ;i++)
{
for(int j= ;j<m ;j++)
{
if(i&(<<j))
{
for(int k= ;k<m ;k++)
{
if(dis[k][j]==INF || !(i&(<<k)))continue ;
dp[j][i]=min(dp[j][i],dp[k][i^(<<j)]+dis[k][j]) ;
}
}
}
}
for(int i= ;i<m ;i++)
ans=min(ans,dp[i][(<<m)-]) ;
if(ans==INF)puts("-1") ;
else printf("%d\n",ans) ;
}
return ;
}
HDU 4856的更多相关文章
- hdu 4856 Tunnels(bfs+状态压缩)
题目链接:hdu 4856 Tunnels 题目大意:给定一张图,图上有M个管道,管道给定入口和出口,单向,如今有人想要体验下这M个管道,问最短须要移动的距离,起点未定. 解题思路:首先用bfs处理出 ...
- HDU 4856 Tunnels(BFS+状压DP)
HDU 4856 Tunnels 题目链接 题意:给定一些管道.然后管道之间走是不用时间的,陆地上有障碍.陆地上走一步花费时间1,求遍历全部管道须要的最短时间.每一个管道仅仅能走一次 思路:先BFS预 ...
- HDU 4856 (状态压缩DP+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫.迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时.出隧道就耗时,你的 ...
- hdu 4856 Tunnels
http://acm.hdu.edu.cn/showproblem.php?pid=4856 这道题就是搜索BFS+状压dp,把所经过的隧道的状态用二进制表示,然后dp就行.bfs求出每两个隧道的最短 ...
- hdu 4856 Tunnels (记忆化搜索)
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- hdu 4856 Tunnels (bfs + 状压dp)
题目链接 The input contains mutiple testcases. Please process till EOF.For each testcase, the first line ...
- hdu 4856 Tunnels 状态压缩dp
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- Tunnels HDU - 4856
BFS寻找每个点到其他点的最小距离 再状压DP,DP[i][j] i二进制表示每个点的到达状态,j为当前所在点 #include<iostream> #include<cstring ...
- 状压dpHDU - 4856
J - Tunnels HDU - 4856 题目大意:地图上有些管道,在管道行走里不需要花费时间,但从一个管道的出口走到另一个管道的入口则需要花费时间,问走完所有管道最短的时间,如果不行,则输出-1 ...
随机推荐
- 教你如何做好SEO优化中的前端优化
网站的速度是很多人都面临的问题,其实许多网站,都没有特意的去优化加载速度,对于一个网站来说,加速不但提高了用户体验(如果一个网站在几秒内没 有打开,大多数用户选择的是关闭而非等待),而且对于SEO的流 ...
- Codeforces Round #308 (Div. 2)----C. Vanya and Scales
C. Vanya and Scales time limit per test 1 second memory limit per test 256 megabytes input standard ...
- js首字母大写--单个单词的处理方式
var operate2='OR'; for (var j = 0, len = operate1.length; j< len; j++) { //获得unicode码 var ch2 = o ...
- PHP函数——parse_ini_file() 函数
资料网址:http://www.w3school.com.cn/php/func_filesystem_parse_ini_file.asp 1.parse_ini_file() 函数解析一个配置文件 ...
- 一个简单的excel文件上传到数据库方法
因为以前项目中有用到过Excel导入,所以整理了一下,这是一个导入Excel数据到数据库的方法 注意:需要导入poi jar包 代码清单 /** * Excel 导入 * @param mapping ...
- Hadoop MapReduceV2(Yarn) 框架简介[转]
对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 H ...
- 使用SMSManager短信管理器实现短信群发
import java.util.ArrayList; import android.os.Bundle;import android.provider.ContactsContract;import ...
- 10款优秀Vim插件帮你打造完美IDE
导读 如果你稍微写过一点代码,就能知道“集成开发环境”(IDE)是多么的便利.不管是Java.C还是Python,当IDE会帮你检查语法.后台编译,或者自动导入你需要的库时,写代码就变得容易许多.另外 ...
- Query的选择器中的通配符[id^='code']或[name^='code']
1.选择器 (1)通配符: $("input[id^='code']");//id属性以code开始的所有input标签 $("input[id$='code'] ...
- --投资情况统计详情sql
--投资情况统计详情sqlselect BidRecord.*, RegInfo.UserName,UserInfo.phone,BorrowInfo.Title,BorrowInfo.BorrowC ...