蓝桥杯-混境之地5

"""
https://www.lanqiao.cn/problems/3820/learning/?page=1&first_category_id=1&problem_id=3820
"""
import os
import sys
from  functools import lru_cache

dic = [(1, 0), (0, 1), (-1, 0), (0, -1)] # 前进方向
n, m, k = map(int, input().split())
A, B, C, D = map(int, input().split())
Map = []
for i in range(n):
    Map.append(list(map(int, input().split())))

# @lru_cache(maxsize = None)的作用是保存每个dfs(x, y, z, w)的值, 
# 对于已经保存的, 下次可以直接拿去用, 无需再次搜索。
@lru_cache(maxsize=None)
def  dfs(x, y, z):
    """
    当前坐标为(x, y), z=True表示使用过了喷气背包
    """
    if x == C - 1 and y == D - 1:
        return True
    for i in range(4):
        xx, yy = x + dic[i][0], y + dic[i][1]
        # 边界条件
        if  xx < 0 or xx >= n or yy < 0 or  yy >= m:
            continue
        # 如果<xx,yy>低于<x,y>则可以走
        if  Map[xx][yy] < Map[x][y]:
            if dfs(xx, yy, z):
                return True
        # 如果喷气背包还未使用, 并且<xx,yy>的高度低于Map[x][y] + k则可以走
        elif z == False and Map[xx][yy] < Map[x][y] + k:
            if dfs(xx, yy, True):
                return  True
    return False

if  dfs(A, B, False):
    print('Yes')
else:
    print('No')

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好无聊啊,烦死

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值