# 会超时的递归代码 a = input().split() ma = (int(a[2]),int(a[3])) # 马的坐标 zd = (int(a[0]),int(a[1])) # 终点的坐标
ma_z = [] # 马的位置
p = [(2,-1),(-2,-1),(1,-2),(-1,-2),(2,1),(-2,1),(1,2),(-1,2),(0,0)] for i in p: x = ma[0]+i[0] y = ma[1]+i[1] if x < 0or y < 0: # 如果计算的x和y是负数,代表不合理的坐标 跳过 continue else: ma_z.append((x,y))# 添加进哈希表
defdfs(i,j): if i > zd[0] or j > zd[1]: # 如果递归出边界 代表不合理的方案 返回0 return0 if (i,j) in ma_z: # 遇到了马 也要返回0 return0 if i == zd[0] and j == zd[1]: # 到达了终点 返回1 代表这条路行得通 return1 return dfs(i+1,j)+dfs(i,j+1) # 相加的方案数 print(dfs(0,0))
a = input().split() ma = (int(a[2]),int(a[3])) # 马的坐标 zd = (int(a[0]),int(a[1])) # 终点的坐标
ma_z = [] # 马的位置
p = [(2,-1),(-2,-1),(1,-2),(-1,-2),(2,1),(-2,1),(1,2),(-1,2),(0,0)] for i in p: x = ma[0]+i[0] y = ma[1]+i[1] if x < 0or y < 0: # 如果计算的x和y是负数,代表不合理的坐标 跳过 continue else: ma_z.append((x,y))# 添加进哈希表
catch = [[0for _ inrange(zd[1]+2)] for _ inrange(zd[0]+2)] # 开个数组
defdfs(i,j): if i > zd[0] or j > zd[1]: return0 if catch[i][j] != 0: # 返回答案 记得写在判断边界下面 return catch[i][j] if (i,j) in ma_z: return0 if zd[0] == i and j == zd[1]: return1 ans = dfs(i+1,j)+dfs(i,j+1) # 用个变量存储 catch[i][j] = ans # 保存答案 return ans # 返回当前递归的答案 print(dfs(0,0))
a = input().split() ma = (int(a[2]),int(a[3])) # 马的坐标 zd = (int(a[0]),int(a[1])) # 终点的坐标
ma_z = [] # 马的位置
p = [(2,-1),(-2,-1),(1,-2),(-1,-2),(2,1),(-2,1),(1,2),(-1,2),(0,0)] for i in p: x = ma[0]+i[0] y = ma[1]+i[1] if x < 0or y < 0: # 如果计算的x和y是负数,代表不合理的坐标 跳过 continue else: ma_z.append((x,y))# 添加进哈希表
catch = [[0for _ inrange(zd[1]+2)] for _ inrange(zd[0]+2)]
defdfs(i,j): if i < 0or j < 0: # 如果超出了边界 return0 if catch[i][j] != 0: return catch[i][j] if (i,j) in ma_z: return0 if i == 0and j == 0: # 如果回到起点,说明这条路合理,方案数+1 return1 ans = dfs(i-1,j)+dfs(i,j-1) catch[i][j] = ans # 保存答案 return ans print(dfs(zd[0],zd[1]))
a = input().split() ma = (int(a[2]),int(a[3])) # 马的坐标 zd = (int(a[0]),int(a[1])) # 终点的坐标
ma_z = [] # 马的位置
p = [(2,-1),(-2,-1),(1,-2),(-1,-2),(2,1),(-2,1),(1,2),(-1,2),(0,0)] for i in p: x = ma[0]+i[0] y = ma[1]+i[1] if x < 0or y < 0: # 如果计算的x和y是负数,代表不合理的坐标 跳过 continue else: ma_z.append((x,y))# 添加进哈希表
dp = [[0for _ inrange(zd[1]+2)] for _ inrange(zd[0]+2)]
#def dfs(i,j): # if i < 0 or j < 0: # return 0 # if catch[i][j] != 0: # return catch[i][j] # if (i,j) in ma_z: # return 0 # if i == 0 and j == 0: # return 1 # ans = dfs(i-1,j)+dfs(i,j-1) # catch[i][j] = ans # 保存答案 # return ans
# 注意这里下面的操作都要+1 for i inrange(0,zd[0]+1): for j inrange(0,zd[1]+1): if i == j == 0: dp[i+1][j+1] = 1 elif (i,j) in ma_z: dp[i+1][j+1] = 0 else: dp[i+1][j+1] = dp[i][j+1] + dp[i+1][j] print(dp[zd[0]+1][zd[1]+1])
a = input().split() ma = (int(a[2]),int(a[3])) # 马的坐标 zd = (int(a[0]),int(a[1])) # 终点的坐标
ma_z = [] # 马的位置
p = [(2,-1),(-2,-1),(1,-2),(-1,-2),(2,1),(-2,1),(1,2),(-1,2),(0,0)] for i in p: x = ma[0]+i[0] y = ma[1]+i[1] if x < 0or y < 0: # 如果计算的x和y是负数,代表不合理的坐标 跳过 continue else: ma_z.append((x,y))# 添加进哈希表
dp = [[0for _ inrange(zd[1]+2)] for _ inrange(zd[0]+2)]
for i inrange(0,zd[0]+1): for j inrange(0,zd[1]+1): if i == j == 0: dp[i+1][j+1] = 1 elif (i,j) in ma_z: dp[i+1][j+1] = 0 else: dp[i+1][j+1] = dp[i][j+1] + dp[i+1][j] print(dp[zd[0]+1][zd[1]+1])