//区间动态规划
#include <iostream>
#include <bits/stdc++.h>
#define INF 0x7F7F7F7F
#define N 1005
using namespace std;
int v[N];
int sum[N];//记录总花费
int dp[N][N];//dp[i][j] 的花费
int solve(int l,int r)
{
if(dp[l][r]==INF)
{
for(int i=l;i<r;i++)
{
dp[l][r]=min(dp[l][r],solve(l,i)+solve(i+1,r)+sum[r]-sum[l-1]);
}
}
return dp[l][r];
}
int main(int argc, char** argv)
{
// 变量初始化:置为最大值
memset(dp,INF,sizeof(dp));
int n;
cin>>n;
sum[0]=0;
for(int i=1;i<=n;i++)
{
cin>>v[i];
sum[i]=sum[i-1]+v[i];
dp[i][i]=0;
}
solve(1,n);
cout<<dp[1][n]<<endl;
return 0;
}