'''
区间DP模板题
'''
N = int(input())
arr = list(map(int, input().split()))
# dp(i,j)表示从i到j的区间中的石子合并成一个石子的所有方案中最小的开销
dp = [[0] * N for _ in range(N)]
s = [val for val in arr]
for i in range(1, len(s)):
s[i] += s[i - 1]
for i in range(N - 1, -1, -1):
for j in range(i, N):
if i != j:
dp[i][j] = 0x7fffffff
for k in range(i, j):
sum = s[j] if i == 0 else s[j] - s[i - 1]
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + sum)
print(dp[0][N - 1])
AcWing 区间DP相关问题 282. 石子合并
猜你喜欢
转载自blog.csdn.net/xiaohaowudi/article/details/107730086
今日推荐
周排行