输入第一行为顶点数N
第二行依次为顶点1至顶点N的权值。
输出仅一行,为这些三角形顶点的权值乘积和的最小值。
5 121 122 123 245 231
12214884
n = eval(input()) a = list(map(int, input().split())) a += a a = [0] + a dp = [[1e40 for i in range(200)] for j in range(200)] for i in range(1, 2 * n + 1): dp[i][i + 1] = 0 for len in range(2, n): for l in range(1, 2 * n - len + 1): r = l + len for k in range(l + 1, r): dp[l][r] = min(dp[l][r], dp[l][k] + dp[k][r] + a[l] * a[r] * a[k]) ans = dp[1][n] for i in range(1, n + 1): ans = min(ans, dp[i][i + n - 1]) print(ans)
原文:https://www.cnblogs.com/HighLights/p/13328082.html