矩阵中的单调路径数(假递归)
201301 JAVA 题目2-3级
http://www.nowcoder.com/questionTerminal/e2a22f0305eb4f2f9846e7d644dba09b
本题即求(a+1)*(b+1)的矩阵中的单调路径数,即a*(b+1)的矩阵中的单调路径数与(a+1)*b的矩阵中的单调路径数之和。递归时可利用对称性。
另一种做法是直接推导出组合式并直接计算(略)。
def num_ways(num_rows, num_columns):
num_rows += 1
num_columns += 1
# Java里用二维数组代替dict,也可以变二维为一维然后用Map
_cache = {}
def _sub(_rows, _columns):
if _rows == 1 or _columns == 1:
return 1
try:
return _cache[(_rows, _columns)]
except KeyError:
# 交换
try:
return _cache[(_columns, _rows)]
except KeyError:
row_result = _sub(_rows - 1, _columns)
_cache[(_rows - 1, _columns)] = row_result
column_result = _sub(_rows, _columns - 1)
_cache[(_rows, _columns - 1)] = column_result
return row_result + column_result
return _sub(num_rows, num_columns)
#实在不知道给的数据格式到底怎样。。
_numbers = []
while True:
try:
inputs = [int(x) for x in input().split() if x.strip()]
_numbers += inputs
except:
break
for i in range(0, len(_numbers), 2):
num_rows, num_columns = _numbers[i], _numbers[i + 1]
print(num_ways(num_rows, num_columns))
查看12道真题和解析