bzoj千题计划225:bzoj2143: 飞飞侠
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: 飞飞侠的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划174:bzoj1800: [Ahoi2009]fly 飞行棋
http://www.lydsy.com/JudgeOnline/problem.php?id=1800 圆上两条直径构成矩形的对角线 #include<cstdio> using nam ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
- bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...
随机推荐
- JavaScript快速入门-ECMAScript本地对象(Date)
JavaScript中的Date 对象用于处理日期和时间. var myDate=new Date() #Date 对象会自动把当前日期和时间保存为其初始值. 一.Date对象的方法 方法 示例 n ...
- Unity XLua 官方教程学习
一.Lua 文件加载 1. 执行字符串 using UnityEngine; using XLua; public class ByString : MonoBehaviour { LuaEnv lu ...
- centos7 设置静态IP
centos7 设置静态IP 一.查找配置文件(/etc/sysconfig/network-scripts) [root@bogon network-scripts]# ll 总用量 232 -rw ...
- PAT甲题题解-1015. Reversible Primes (20)-素数
先判断n是否为素数然后把n转化成d进制下再反转,转化为十进制的num判断num是否为素数 注意n为0和1时,不是素数!!!注意反转后的num也有可能为1,不是素数!!! #include <io ...
- PAT甲题题解-1105. Spiral Matrix (25)-(模拟顺时针矩阵)
题意:给定N,以及N个数.找出满足m*n=N且m>=n且m-n最小的m.n值,建立大小为m*n矩阵,将N个数从大到下顺时针填入矩阵中. #include <iostream> #in ...
- Leetcode题库——40.组合总和II
@author: ZZQ @software: PyCharm @file: combinationSum2.py @time: 2018/11/15 18:38 要求:给定一个数组 candidat ...
- Java编写准备数据源
1.装饰设计模式 package com.itheima.ds; import java.sql.Array; import java.sql.Blob; import java.sql.Callab ...
- powershell远程管理服务器磁盘空间的实现代码
一.启用远程管理 1.将管理服务器的trusthost列表改为* 运行Set-item wsman:localhostclienttrustedhosts ?value * 2.在远程服务器上运行En ...
- Kafka与Logstash的数据采集对接
Logstash工作原理 由于Kafka采用解耦的设计思想,并非原始的发布订阅,生产者负责产生消息,直接推送给消费者.而是在中间加入持久化层--broker,生产者把数据存放在broker中,消费者从 ...
- 【转】在SpringMVC Controller中注入Request成员域
原文链接:https://www.cnblogs.com/abcwt112/p/7777258.html 原文作者:abcwt112 主题 在工作中遇到1个问题....我们定义了一个Controlle ...