#include<cstdio>
#include<cstring>
#define min(a,b) a>b?b:a
using namespace std;
#define N 110
int n,s[N],f[N][N];//f[i][j]表示区间[i,j]合并的最小代价
int main(){
memset(f,127,sizeof f);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&s[i]),s[i]+=s[i-1];//预处理前i个的合并代价 (降低算法复杂度)
for(int i=1;i<=n;i++) f[i][i]=0;
for(int i=n-1;i;i--){
for(int j=i+1;j<=n;j++){
for(int k=i;k<j;k++){
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);
}
}
}
printf("%d\n",f[1][n]);
return 0;
}