import sys
input = sys.stdin.readline
T = int(input())
INF = 10**9
for _ in range(T):
N = int(input())
books = list(map(int,input().split()))
prefix_sum = [0]*(N+1)
dp =[[10**9] *N for _ in range(N)]
min_k_store_array = list(range(N))
for i in range(N):
dp[i][i] = 0
prefix_sum[i+1] = prefix_sum[i] + books[i]
for term in range(1,N):
new_arr = [None]*N
for i in range(N-term):
j = term+i
for k in range(min_k_store_array[i],min(min_k_store_array[i+1]+1,j)):
if dp[i][j] > dp[i][k]+dp[k+1][j]:
dp[i][j] = dp[i][k]+dp[k+1][j]
new_arr[i] = k
dp[i][j] += prefix_sum[j+1] - prefix_sum[i]
min_k_store_array = new_arr
print(dp[0][N-1])
T = int(input())
INF = float('inf')
for _ in range(T):
N = int(input())
arr = list(map(int,input().split()))
result = 0
while len(arr) >=2:
find_idx = len(arr)-2
for i in range(len(arr)-2):
if arr[i] <= arr[i+2]:
find_idx = i
break
a1 = arr.pop(find_idx)
a2 = arr.pop(find_idx)
B = a1 + a2
arr.insert(find_idx,B)
result += B
B_index = find_idx
while B_index >0 and arr[B_index-1] < arr[B_index]:
arr[B_index],arr[B_index-1] = arr[B_index-1],arr[B_index]
B_index -= 1
print(result)
'알고리즘 > 백준_복기_미완료' 카테고리의 다른 글
[BOJ/백준] 14570 나무 위의 구슬 (0) | 2021.05.05 |
---|---|
[BOJ/백준] 14476 최대공약수 하나 빼기 (0) | 2021.05.05 |
[BOJ/백준] 13913 숨바꼭질 4 (0) | 2021.05.05 |
[BOJ/백준] 13460 구슬 탈출 2 (0) | 2021.05.05 |
[BOJ/백준] 13458 시험감독 (0) | 2021.05.05 |