从一个2×2网格的左上角开始,有6条(不允许往回走)通往右下角的路。
对于20×20的网格,这样的路有多少条?
def get_load_num(x, y):
"""
(x, y)网格的路数等于(x - 1, y) + (x, y - 1)
"""
if x == 0 or y == 0:
return 1
return get_xy_load(x - 1, y) + get_xy_load(x, y - 1)
def get_xy_load(x, y):
"""
递归调用
注意保存已求解过的网格
"""
key = str(x) + '_' + str(y)
if key in xy_dict:
xy_load = xy_dict[key]
else:
xy_load = get_load_num(x, y)
xy_dict[key] = xy_load
return xy_load
xy = 20
xy_dict = dict()
print(get_load_num(xy, xy))
# 动态规划求解
xy = 20
xy += 1
x_load_num = [1] * xy
for y in range(1, xy):
for x in range(1, xy):
x_load_num[x] += x_load_num[x - 1]
print(x_load_num[-1])