/*

                         YATIN KWATRA        _03_08_14


Let's Hoop..



           o
 /|   o         o
 \|=--            o
    ##
                    \\
                 /   \O
                O_/   T
                T    /|
                |\  | |
 _______________|_|________

------------------------------------------------

o- - -  \o          __|
   o/   /|          vv`\
  /|     |              |
   |    / \_            |
  / \   |               |
 /  |                   |


------------------------------------------------

HOOPER_4_LYF..

*/

// AC BAKSHI RABBA

// #pragma GCC optimize "trapv"

#include <bits/stdc++.h>
#define ll                      long long
#define ld                      long double
#define ull                     unsigned long long
#define FIO                     ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define endl                    "\n"
#define fo(i,a,b)               for(int i = a; i<=b ; i++)
#define rfo(i,a,b)              for(int i = a; i>=b ; i--)
#define vii                     vector<int>
#define vll                     vector<ll>
#define pq                      priority_queue
#define uom                     unordered_map
#define all(v)                  v.begin(),v.end()
#define mp                      make_pair
#define pb                      push_back
#define pob                     pop_back
#define ff                      first
#define ss                      second
#define pii                     pair<int,int>
#define pll                     pair<ll,ll>
#define mll                     map<ll,ll>
#define mii                     map<int,int>
#define vvii                    vector<vii>
#define vvll                    vector<vll>
#define mod                     1000000007
#define MIN                     -1e9
#define pi                      3.1415926535897932384626433832795

using namespace std;

void INPUT()
{
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
}

/*
----------------------------------------------------------------

   -> Check For Overflows
   -> Out of Bounds
   -> Initialisations of global arrays and variables
   -> Read the Question and the sample test cases carefully
   -> Its not Always Complex, Try to simplify
   -> write it down and try to solve
   -> Have Faith in urself and in ur approach
   -> If it seems totally out of reach, switch to next :)
   -> And Come Back later, if possible ..

----------------------------------------------------------------*/


const int N = 405;

ll dp[N][N];
ll cost[N][N];

void solve()
{

  int n;
  cin >> n;


  vii v(n);

  fo(i, 0, n - 1) cin >> dp[i][i];

  fo(i, 0, N - 1)
  {
    fo(j, 0, N - 1)
    {
      if (i ^ j) dp[i][j] = cost[i][j] = 1e18;
      else cost[i][j] = 0;
    }
  }


  int i, j;

  ll cur;
  ll cash;

  fo(J, 1, n - 1)
  {
    i = 0, j = J;

    while (i < n and j < n)
    {
      fo(k, i, j - 1)
      {
        cur = dp[i][k] + dp[k + 1][j];
        cash = cur + cost[i][k] + cost[k + 1][j];

        if (cost[i][j] > cash)
        {
          cost[i][j] = cash;
          dp[i][j] = cur;
        }
      }

      i++, j++;
    }
  }

  cout << cost[0][n - 1] << endl;



}

int main() {

  FIO
  INPUT();

  int t;
  t = 1;
// cin >> t;

  fo(i, 0, t - 1)
  {
    solve();
  }
  return 0;
}

Measured memory_bytes: 6176