题目连接

题解 : 对两两管道进行bfs,然后用dp[i][j] 来表示在i状态下通过了前j个管道

参考博客

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<int,int> pii;
typedef vector<int> vi;
#define de(x) cout << #x << "=" << x << endl
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define pb push_back
#define fi first
#define se second
const int inf = 0x3f3f3f3f;
const int N = 1e5+5;
char mp[20][20];
struct Pipe{
int x1,x2,y1,y2;
}a[20];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int dis[20][20];
int pp[20][20];
int dp[1<<15][20];
int n,m;
int bfs(Pipe a,Pipe b)
{
queue<pii>que;
int nx,ny;
memset(dis,-1,sizeof(dis));
dis[a.x2][a.y2]=0;
que.push(pii(a.x2,a.y2));
while(!que.empty())
{
pii u=que.front();
que.pop();
if(u.fi==b.x1&&u.se==b.y1) return dis[u.fi][u.se];
for(int i=0;i<4;i++)
{
nx=u.fi+dx[i],ny=u.se+dy[i];
if(nx>n||nx<=0||ny>n||ny<=0||mp[nx][ny]=='#'||dis[nx][ny]!=-1) continue;
dis[nx][ny]=dis[u.fi][u.se]+1;
que.push(pii(nx,ny));
}
}
return -1;
}
void init()
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
if(i==j) pp[i][j]=0;
else pp[i][j]=bfs(a[i],a[j]);
}
}
} int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
scanf("%s",mp[i]+1);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
}
init();
memset(dp,inf,sizeof(dp));
for(int i=1;i<=m;i++)
{
dp[1<<(i-1)][i]=0;
}
int ans=inf;
for(int i=0;i<(1<<m);i++)
{
for(int j=1;j<=m;j++)
{
if(i&(1<<(j-1)))//i状态下有第j个管道才能进行
{
for(int k=1;k<=m;k++)
{
if(i&(1<<(k-1))==0||pp[k][j]==-1) continue;//同理
dp[i][j]=min(dp[i^(1<<(j-1))][k]+pp[k][j],dp[i][j]);
}
}
if(i==(1<<m)-1) ans=min(ans,dp[i][j]);
}
}
if(ans==inf) cout<<"-1\n";
else cout<<ans<<endl;
}
}

bfs+状态压缩dp的更多相关文章

  1. HDU 3247 Resource Archiver (AC自己主动机 + BFS + 状态压缩DP)

    题目链接:Resource Archiver 解析:n个正常的串.m个病毒串,问包括全部正常串(可重叠)且不包括不论什么病毒串的字符串的最小长度为多少. AC自己主动机 + bfs + 状态压缩DP ...

  2. BFS+状态压缩DP+二分枚举+TSP

    http://acm.hdu.edu.cn/showproblem.php?pid=3681 Prison Break Time Limit: 5000/2000 MS (Java/Others)   ...

  3. hdu 4770 13 杭州 现场 A - Lights Against Dudely 暴力 bfs 状态压缩DP 难度:1

    Description Harry: "But Hagrid. How am I going to pay for all of this? I haven't any money.&quo ...

  4. HDU 3681 Prison Break(状态压缩dp + BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3681 前些天花时间看到的题目,但写出不来,弱弱的放弃了.没想到现在学弟居然写出这种代码来,大吃一惊附加 ...

  5. HOJ 2226&POJ2688 Cleaning Robot(BFS+TSP(状态压缩DP))

    Cleaning Robot Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4264 Accepted: 1713 Descri ...

  6. hdu 4856 Tunnels 状态压缩dp

    Tunnels Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem ...

  7. [转]状态压缩dp(状压dp)

    状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...

  8. uva10857(状态压缩DP)

    uva10857 题意 兔子希望在平面上 n 个点上放蛋,每个点最多放一个蛋,初始兔子在 (0, 0) 点,这里有无数个蛋,兔子可以回到这个点取蛋,兔子的速度为 \(v * 2^{-i}\)(i 为携 ...

  9. WOJ 1546 Maze 图论上的状态压缩DP

    http://acm.whu.edu.cn/land/problem/detail?problem_id=1546 这个题目还是聪哥教的方法过的 首先搜索是必须的,而且通过搜索来缩点,这些应该要想到, ...

随机推荐

  1. Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

    1.主要完成的任务是能够将英文转译为法文,使用了一个encoder-decoder模型,在encoder的RNN模型中是将序列转化为一个向量.在decoder中是将向量转化为输出序列,使用encode ...

  2. awk循环语句-【AWK学习之旅】

      AWK中两种循环语句:if-else 和 while   控制流语句: 1.if-else 求总数,平均值: [root@monitor awkdir]# awk '$3>6 {n = n ...

  3. 20145302张薇《Java程序设计》第四周学习总结

    20145302 <Java程序设计>第四周学习总结 教材学习内容总结 第六章 继承共同行为 面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承. 程序代 ...

  4. 20145303 《Java程序设计》第8周学习总结

    20145303 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO和NIO2 1.NIO的定义 InputStream.OutputStream的输入输出,基本上是以 ...

  5. MR案例:外连接代码实现

    [外连接]是在[内连接]的基础上稍微修改即可.具体HQL语句详见Hive查询Join package join.map; import java.io.IOException; import java ...

  6. OGNL与ValueStack(VS)-N语法top语法(转)

    N语法[0]:<s:property value="[0]"/><br> N语法[1]:<s:property value="[1]&quo ...

  7. 通过window(Navicat)访问linux中的mysql数据库

    Centos安装Mysql数据库 查看我们的操作系统上是否已经安装了mysql数据库 [root@centos~]# rpm -qa | grep mysql // 这个命令就会查看该操作系统上是否已 ...

  8. Lucene TF-IDF 相关性算分公式

    转自: http://lutaf.com/210.htm Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF- ...

  9. 【目标检测】R-CNN系列与SPP-Net总结

    目录 1. 前言 2. R-CNN 2.0 论文链接 2.1 概述 2.2 pre-training 2.3 不同阶段正负样本的IOU阈值 2.4 关于fine-tuning 2.5 对文章的一些思考 ...

  10. 数据结构实习 - Problem N 树的括号表示法

    writer:pprp date:20171103 题目描述 先将根结点放入一对圆括号中,然后把它的子树按由左而右的顺序放入括号中,而对子树也采用同样方法处理:同层子树与它的根结点用圆括号括起来,同层 ...