AcWing 区间DP相关问题 320. 能量项链

'''
区间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)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值