题意很简单,求出出口到其他入口之间的最短路径,再求走完所有管道的距离的最小值。

按自己的思路就是TLE……

看了题解后学习了状态压缩动态规划,再加宽搜求最短距离就ok了。

这里的dp【i】【j】表示以i为起点,在状态j下的最优值。(其中j是用十进制表示的二进制,例如:dp【2】【5】表示以2为起点,走了管道0和2的最优值。)

动态转移方程:dp【i】【j|(1<<i)】=min(dp【i】【j|(1<<i)】,dp【k】【i】+dis【k】【i】)

其中i的范围(0-m-1),j的范围(0-1<<m),k的范围(0-m-1)。

#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int inf=1<<29;
const int maxn=40;
const int maxm=(1<<15)+1000;
struct Tunnel
{int x1;int y1;int x2;int y2;int id;
}t[maxn];
struct Node
{int x;int y;int ans;
};
int n,m,des,vis[maxn][maxn],dis[maxn][maxn];
int movex[4]={1,-1,0,0},movey[4]={0,0,1,-1};
int e,st,dp[maxn][maxm];
char map[maxn][maxn];
queue<Node>q;bool isborder(int x,int y)
{if(x<1||x>n||y<1||y>n)return true;return false;
}
void bfs()
{for(int i=0; i<m; i++){memset(vis,-1,sizeof(vis));Node st;st.x=t[i].x2;st.y=t[i].y2;st.ans=0;q.push(st);vis[st.x][st.y]=0;while(!q.empty()){Node u=q.front();q.pop();for(int j=0; j<4; j++){st.x=u.x+movex[j];st.y=u.y+movey[j];if(isborder(st.x,st.y)||map[st.x][st.y]=='#'||vis[st.x][st.y]!=-1)continue;vis[st.x][st.y]=st.ans=u.ans+1;q.push(st);}}for(int j=0; j<m; j++){if(i!=j&&vis[t[j].x1][t[j].y1]!=-1)dis[i][j]=vis[t[j].x1][t[j].y1];else dis[i][j]=inf;}}
}//求此通道出口和其他通道入口的最短路径 void deal()
{int i,j,k;des=1<<m;for(i=0; i<des; i++)for(j=0; j<m; j++)dp[j][i]=inf;for(i=0; i<m; i++)dp[i][1<<i]=0;for(i=0; i<des; i++)for(j=0; j<m; j++){if(i&(1<<j))continue;for(k=0; k<m; k++)dp[j][i|(1<<j)]=min(dp[j][i|(1<<j)],dp[k][i]+dis[k][j]);}int ans=inf;for(i=0; i<m; i++)ans=min(ans,dp[i][des-1]);if(ans>=inf)printf("-1\n");else printf("%d\n",ans);
}//状态DP int main()
{while(scanf("%d%d",&n,&m)!=EOF){for(int i=1; i<=n; i++)scanf("%s",map[i]+1);for(int i=0; i<m; i++){int x1,y1,x2,y2;scanf("%d%d%d%d",&t[i].x1,&t[i].y1,&t[i].x2,&t[i].y2);t[i].id=i;}bfs();deal();}return 0;
}

2014 西安邀请赛状压DP相关推荐

  1. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

    题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...

  2. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  3. 【vijos P1914】【codevs 3904】[NOIP2014 普及组T4]子矩阵(dfs+状压dp)

    P1914子矩阵 Accepted 标签:NOIP普及组2014[显示标签] 描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与 列的相对顺序)被称为原矩阵 ...

  4. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  5. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  6. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  7. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  8. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  9. 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)

    题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...

最新文章

  1. Neighbor-Vote:使用邻近距离投票优化单目3D目标检测(ACM MM2021)
  2. java map按照value排序_基础:Java集合需要注意的 5 个问题
  3. python函数返回布尔值_python-3.x - 函数不返回正确的布尔值 - SO中文参考 - www.soinside.com...
  4. 1.12 改善你的模型的表现
  5. clark变换_电力变换器PWM原理与实践,p43页,空间矢量理解
  6. [POI2010]Divine Divisor
  7. wps直接打开CVS文件会把长串数字订单号最后4位变为0
  8. SVN主干合并到分支
  9. 快速上手python websockets
  10. cesium添加单张图片
  11. 华为初面+综合面试(技术面)
  12. Java 在PPT中添加文本水印的简易方法(单一/平铺水印)
  13. Excel中如何找出两列数据中相同的数据,并且进行同行显示
  14. 2020“数维杯”国际大学生数学建模竞赛赛题分析
  15. 一个人花8块钱买了只鸡,9块钱卖了,又10块钱买回来,11块钱又卖了,他赚了多少钱
  16. 循环神经网络(RNN)实现股票预测
  17. Java异常捕获论文_一篇文章解决Java异常处理
  18. java中的常用名词,Java编程基础常见英语词汇
  19. Mldonkey端口映射获取High id
  20. 【求职干货】HR喜欢看什么样的简历?

热门文章

  1. 关于怎样做一个不会被检测的点击脚本教程
  2. 微信小程序navigationBarTitleText不起作用
  3. duilib学习笔记
  4. 记事本编写html乱码解决方法
  5. 基于FPGA的USB2.0数据传输(通过本文可以自己设计USB2.0模块)
  6. Arduino 串口的一些高级用法
  7. 华铭智能属于芯片概念吗_国产芯片概念股龙头有哪些股票?2020国产芯片概念名单一览表...
  8. python母婴用品电商平台django
  9. 学习笔记 | 操作系统中的缺页中断
  10. wkwebview html5页面,WKWebView:适配H5页面的显示尺寸