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

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

相关推荐

点赞 评论 收藏
分享
offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务