这是一个动态规划题目,难度不高,主要再考对于二叉树的理解。
对于如下三角形: 2 3 4 6 5 3 4 1 8 3 规定从顶层到底层移动求和的顺序为向下和向右下两个方向。那么求从最顶层的点移动到最底层,路径上每层数字最小的路径和是多少。 移动到第一层 f(1)=2 移动到第二层 f(2)=2+3=5 移动到第三层 f(3)=2+4+3=9 移动到第四层 f(4)=2+3+5+1=11 |
这个题要思考一下,不难发现从下往上会简单很多,那么这个题目其实就是显而易见了
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/8 11:23
from typing import List
class Solut:
def dpsolut(self, list1):
n = len(list1)
dp = [[0] * (n + 1) for _ in range(n + 1)]
for i in range(len(list1) - 1, -1, -1):
for j in range(0, i + 1, 1):
dp[i][j] = min(dp[i + 1][j], dp[i + 1][j + 1]) + list1[i][j]
return dp[0][0]
print(Solut().dpsolut([[2], [3, 4], [6, 5, 3], [4, 1, 8, 3]]))