#inclu#include <iostream>
#include <limits.h>
#include <algorithm>
#include <string.h>
#include<math.h>
#include<vector>
#define maxl 0x7fffffff
using namespace std;
int data[1001];
int dp[1001][1001];
int sum[1001];
void fun(int n){
memset(dp,0,sizeof(dp));
for(int k=1;k<n;k++)
for(int i=0;i<n-k;i++){
int j=i+k;
if(k==1&&i!=0) dp[i][j]=sum[j]-sum[i-1];
if(k==1&&i==0) dp[i][j]=sum[j];
if(k!=1){
int val=maxl;
for(int s=i;s<j;s++)
if(i!=0) val=min(dp[i][s]+dp[s+1][j]+sum[j]-sum[i-1],val);
else val=min(dp[i][s]+dp[s+1][j]+sum[j],val);
dp[i][j]=val;
}
}
cout<<dp[0][n-1];
}
int main(){
int n;
cin >>n;
for (int i = 0; i<n; i++){
cin>>data[i];
if (i == 0)sum[i] = data[i];
else sum[i] = sum[i - 1] + data[i];
}
fun(n);
return 0;
}
#include <limits.h>
#include <algorithm>
#include <string.h>
#include<math.h>
#include<vector>
#define maxl 0x7fffffff
using namespace std;
int data[1001];
int dp[1001][1001];
int sum[1001];
void fun(int n){
memset(dp,0,sizeof(dp));
for(int k=1;k<n;k++)
for(int i=0;i<n-k;i++){
int j=i+k;
if(k==1&&i!=0) dp[i][j]=sum[j]-sum[i-1];
if(k==1&&i==0) dp[i][j]=sum[j];
if(k!=1){
int val=maxl;
for(int s=i;s<j;s++)
if(i!=0) val=min(dp[i][s]+dp[s+1][j]+sum[j]-sum[i-1],val);
else val=min(dp[i][s]+dp[s+1][j]+sum[j],val);
dp[i][j]=val;
}
}
cout<<dp[0][n-1];
}
int main(){
int n;
cin >>n;
for (int i = 0; i<n; i++){
cin>>data[i];
if (i == 0)sum[i] = data[i];
else sum[i] = sum[i - 1] + data[i];
}
fun(n);
return 0;
}