给定 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))