矩阵中的单调路径数(假递归)

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))
全部评论

相关推荐

11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务