leetcode 1039. 多边形三角剖分的最低得分

给定 N,想象一个凸 N 边多边形,其顶点按顺时针顺序依次标记为 A[0], A[i], ..., A[N-1]。

假设您将多边形剖分为 N-2 个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角剖分的分数是进行三角剖分后所有 N-2 个三角形的值之和。

返回多边形进行三角剖分后可以得到的最低分。

lru_cache 能够自动缓存函数执行的结果,非常适合动态规划和递归

from functools import lru_cache

nums = [1,3,1,4,1,5]

@lru_cache(maxsize=None)
def dp(start,end):
    if end-start==1: return 0
    ans = float("inf")
    for x in range(start+1, end):
        ans = min(ans, dp(start, x) + dp(x,end) + nums[start]*nums[x]*nums[end])
    return ans
print(dp(0,5))

你可能感兴趣的:(算法,leetcode)