AcWing 320. 能量项链 区间DP
原题链接
简单
作者:
皓首不倦
,
2020-07-26 10:26:01
,
所有人可见
,
阅读 612
'''
区间DP问题
'''
N = int(input())
arr = list(map(int, input().split()))
# 把圈拆成链条
arr = arr * 2
from functools import lru_cache
# dp(i, j)表示区间i, j中所有计算顺序的选择中,最佳选择对应的最大收益
@lru_cache(typed=False, maxsize=128000000)
def dp(i, j):
if j - i < 2:
return 0
if j - i == 2:
return arr[i] * arr[i+1] * arr[i+2]
ans = 0
for k in range(i+1, j):
tmp = dp(i, k) + dp(k, j) + arr[i] * arr[k] * arr[j]
ans = max(ans, tmp)
return ans
ans = 0
for i in range(N):
ans = max(ans, dp(i, i + N))
print(ans)