http://www.lydsy.com/JudgeOnline/problem.php?id=2143

分层图最短路

把能够弹跳的曼哈顿距离看做能量

dp[i][j][k]表示在(i,j)位置,还有能量k的最少花费

弹跳的曼哈顿距离增加1,能量减1

当能量减为0时,花费费用充满能量

#include<queue>
#include<cstdio>
#include<iostream> #define N 151 typedef long long LL; const LL inf=1e17; using namespace std; int n,m;
int energy[N][N],cost[N][N]; int X[],Y[]; LL dp[N][N][N<<];
bool vis[N][N][N<<]; int dx[]={,-,,,};
int dy[]={,,,,-}; struct node
{
int x,y,k;
LL val; node(int x_=,int y_=,int k_=,int val_=) :x(x_),y(y_),k(k_),val(val_) {} bool operator < (node p) const
{
return val>p.val;
} }now; priority_queue<node>q; void read(int &x)
{
x=; int f=; char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-; c=getchar(); }
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
x*=f;
} void dijkstra(int e)
{
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
for(int k=;k<=n+m-;++k)
{
dp[i][j][k]=inf;
vis[i][j][k]=false;
}
while(!q.empty()) q.pop();
vis[X[e]][Y[e]][]=true;
dp[X[e]][Y[e]][energy[X[e]][Y[e]]]=cost[X[e]][Y[e]];
now.x=X[e];
now.y=Y[e];
now.k=energy[now.x][now.y];
now.val=cost[now.x][now.y];
q.push(now);
int sx,sy,nx,ny,k;
while(!q.empty() && (!vis[X[]][Y[]][] || !vis[X[]][Y[]][] || !vis[X[]][Y[]][]))
{
now=q.top();
q.pop();
sx=now.x; sy=now.y; k=now.k;
if(vis[sx][sy][k]) continue;
vis[sx][sy][k]=true;
if(now.k)
{
for(int i=;i<;++i)
{
nx=now.x+dx[i];
ny=now.y+dy[i];
if(nx<= || nx>n || ny<= || ny>m) continue;
if(dp[sx][sy][k]<dp[nx][ny][k-])
{
dp[nx][ny][k-]=dp[sx][sy][k];
q.push(node(nx,ny,k-,dp[nx][ny][k-]));
}
}
}
else
{
if(dp[sx][sy][]+cost[sx][sy]<dp[sx][sy][energy[sx][sy]])
{
dp[sx][sy][energy[sx][sy]]=dp[sx][sy][]+cost[sx][sy];
q.push(node(sx,sy,energy[sx][sy],dp[sx][sy][energy[sx][sy]]));
}
}
}
} int main()
{
int x;
read(n); read(m);
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
{
read(x);
energy[i][j]=min(x,max(i-,n-i)+max(j-,m-j));
}
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
read(cost[i][j]);
for(int i=;i<=;++i)
read(X[i]),read(Y[i]);
LL ans=inf; char pos;
dijkstra();
LL a1=dp[X[]][Y[]][],a2=dp[X[]][Y[]][];
dijkstra();
LL b1=dp[X[]][Y[]][],b2=dp[X[]][Y[]][];
dijkstra();
LL c1=dp[X[]][Y[]][],c2=dp[X[]][Y[]][];
if(b1+c1<ans) ans=b1+c1,pos='X';
if(a1+c2<ans) ans=a1+c2,pos='Y';
if(a2+b2<ans) ans=a2+b2,pos='Z';
if(ans>=inf) printf("NO");
else printf("%c\n%lld",pos,ans);
return ;
}

bzoj千题计划225:bzoj2143: 飞飞侠的更多相关文章

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. bzoj千题计划174:bzoj1800: [Ahoi2009]fly 飞行棋

    http://www.lydsy.com/JudgeOnline/problem.php?id=1800 圆上两条直径构成矩形的对角线 #include<cstdio> using nam ...

  3. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  4. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  5. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  6. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

  7. bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...

  8. bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹

    http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...

  9. bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机

    http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...

随机推荐

  1. Android中级教程之----Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

    在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助. android. ...

  2. SpringBoot日记——MQ消息队列整合(一)

    除了之前讲到的缓存,我们还会用到消息队列来存储一些消息,为了提升系统的异步性能等等: 消息服务有两个概念需要知道:消息代理-message broker,目的地-destination.消息发送由代理 ...

  3. 前端项目模块化的实践1:搭建 NPM 私有仓库管理源码及依赖

    以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...

  4. mssql循环记录之while方法

    1.定义变量 Declare @i Int 2.获取单条记录 Select @i=Min([id]) From [数据库名] Where <检索条件> 3.While循环 While @i ...

  5. EOS开发基础之二:使用cleos命令行客户端操作EOS(钱包wallet基础操作)

    不知道下边这一段英文你们是不是能看懂,如果看不懂那就算了,我就是转过来随便看看的. 总之你记住nodeos.cleos和keosd这三个工程十分重要就行了,回头咱们的研究都从这三个工程杀进去. EOS ...

  6. java 中的内部类总结

    内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类. 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液.跳动). 显 ...

  7. 冲刺Two之站立会议8

    今天对软件进行了用户试用,找了一些同学让他们试用软件之后对软件给出了建议,这样我们可以在一定程度上对它进行进一步地优化.

  8. kickstart自动化安装

    preboot execute environment预启动执行环境--intel开发的技术,计算机可以通过pxe协议从网络引导启动. 工作模式为客户端/服务器端的c/s模式 客户端从远端服务器下载镜 ...

  9. 虚拟主机修改上传配置(PHP)

    虚拟主机中不允许修改php.ini 配置文件(当然有的允许修改,则修改php.ini,因为有时候在线上通过.htaccess 修改了也没有作用),只能通过ini_set() 或重写文件.htacces ...

  10. Docker(一)-Docker介绍

    什么就Docker? Docker是一个开源项目, 诞生于2013年初,最初是dotCloud公司内部的一个业余项目.它基于Google公司推出的Go语言实现.项目后来加入了Linux基金会,遵从了A ...