题解 | #棋盘#

棋盘

https://www.nowcoder.com/practice/aa1710fef87a43e390fde7f236452df3

import sys
sys.setrecursionlimit(2000)


n, m = map(int, input().split())

a = [[0] * m for _ in range(n)]
b = [[0] * m for _ in range(n)]
f = [[0] * m for _ in range(n)]
vis = [[0] * m for _ in range(n)]

for i in range(n):
    a[i] = list(map(int, input().split()))

for i in range(n):
    b[i] = list(map(int, input().split()))
    

step = [[0, 1], [0, -1], [-1, 0], [1, 0]]

def dfs(x, y):
    if(vis[x][y]):
        return f[x][y]
    vis[x][y] = 1
    f[x][y] = 1
    for i in range(4):
        nx = x + step[i][0]
        ny = y + step[i][1]
        if(nx < 0 or ny <0 or nx >= n or ny >= m):
            continue
        if(a[nx][ny] + b[nx][ny] <= a[x][y]):
            f[x][y] += dfs(nx, ny)

    f[x][y] = f[x][y] % 100007
    return f[x][y]

num = int(input())

for i in range(num):
    x, y = map(int, input().split())
    x -= 1
    y -= 1
    output = dfs(x, y)
    print(output)
    
    

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务