"""
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')
蓝桥杯-混境之地5
最新推荐文章于 2024-07-18 19:36:20 发布