博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
状压dpHDU - 4856
阅读量:4347 次
发布时间:2019-06-07

本文共 1936 字,大约阅读时间需要 6 分钟。

 

  题目大意:地图上有些管道,在管道行走里不需要花费时间,但从一个管道的出口走到另一个管道的入口则需要花费时间,问走完所有管道最短的时间,如果不行,则输出-1.

  先用bfs处理出每两个点之间的距离,这样就可以知道每个管道出口到其他出口的距离,然后就是怎么走这些管道,如果直接深搜有15!种情况,肯定不行,而n,m最大都才15,总状态一共就215-1个,这样我们枚举每个状态,然后再枚举这个状态已经走过的管道,最后枚举这个状态没走到的管道,dp[i][j]就代表i状态最后走的是j管道的最短时间。 

1 #include
2 #include
3 #include
4 using namespace std; 5 const int inf=0x3f3f3f3f; 6 const int ne[4][2]={
{
0,1},{
1,0},{
0,-1},{-1,0}}; 7 struct Node{ 8 int x,y,t; 9 Node(){}10 Node(int x,int y,int t):x(x),y(y),t(t){}11 };12 int n,m,sn,ans,dis[20][20][20][20],vis[20][20];13 int x1[20],y1[20],x2[20],y2[20],dp[1<<18][20],cf2[18]={
1};14 char s[20][20];15 void bfs(int x,int y)16 {17 memset(vis,0,sizeof(vis));18 vis[x][y]=1;19 queue
q;20 q.push(Node(x,y,0));21 while(!q.empty())22 {23 Node p=q.front();24 q.pop();25 dis[x][y][p.x][p.y]=p.t;26 for(int i=0;i<4;i++)27 {28 int dx=p.x+ne[i][0];29 int dy=p.y+ne[i][1];30 if(dx<=0||dx>n||dy<=0||dy>n)31 continue;32 if(!vis[dx][dy]&&s[dx][dy]!='#')33 {34 vis[dx][dy]=1;35 q.push(Node(dx,dy,p.t+1));36 }37 }38 }39 }40 int main()41 {42 for(int i=1;i<=15;i++)43 cf2[i]=cf2[i-1]<<1;44 while(~scanf("%d%d",&n,&m))45 {46 memset(dp,inf,sizeof(dp));47 memset(dis,inf,sizeof(dis));48 for(int i=1;i<=n;i++)49 scanf("%s",s[i]+1);50 for(int i=1;i<=n;i++)51 for(int j=1;j<=n;j++)52 bfs(i,j);//预处理出距离 53 for(int i=0;i
=inf)74 printf("%d\n",-1);75 else76 printf("%d\n",ans);77 }78 return 0;79 }
马里奥

 

转载于:https://www.cnblogs.com/LMCC1108/p/10740214.html

你可能感兴趣的文章
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Linux的用户态和内核态
查看>>
JavaScript原生错误及检测
查看>>
大众点评实时监控系统CAT的那些坑
查看>>
(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(3): 深度克隆clone()
查看>>
为什么写作
查看>>
整数子数组求最大和添加验证
查看>>
【转】通过blob获取图像并显示
查看>>
使用kubeadm安装Kubernetes
查看>>
Principal Component Analysis 主元分析
查看>>
JDBC原生态代码
查看>>
韩版可爱小碎花创意家居收纳挂袋
查看>>
计算机基础之硬件
查看>>
python操作mysql ------- SqlAchemy正传
查看>>
如何使用 JSP JSTL 显示/制作树(tree) 菜单
查看>>
12.5号
查看>>
lintcode-medium-Binary Tree Zigzag Level Order Traversal
查看>>
04-spring框架—— Spring 集成 MyBatis
查看>>
eniac世界第二台计算机
查看>>
logrotate日志切割
查看>>