#include #include using namespace std; #define MAXN 10002 int c[MAXN]; long long dp[MAXN][MAXN]; int maxj[MAXN]; long long sums[MAXN]; long long doit(int p, int n) { if(p == 0) return 0; if(n <= 0) return 1LL<<62; if(dp[p][n] >= 0) return dp[p][n]; dp[p][n] = 1LL<<62; for(int j = 0; j < p; ++j) { long long s = sums[p]-sums[j]; long long w = doit(j, n-1) + s*(n+p); if(w < dp[p][n]) dp[p][n] = w; } return dp[p][n]; } int main() { ifstream fin("elias.in"); int n; while(fin >> n && n > 0) { for(int i = 0; i < n; ++i) fin >> c[i]; sums[0] = 0; for(int i = 0; i < n; ++i) sums[i+1] = c[i]+sums[i]; for(int i = 0; i <= n; ++i) dp[0][i] = 0; for(int i = 1; i <= n; ++i) for(int j = 0; j <= n; ++j) dp[i][j] = -1; long long ret = 1LL<<62; for(int i = 1; i <= n; ++i) { long long w = doit(n, i); if(w < ret) ret = w; } /* maxj[0] = 0; for(int i = 1; i <= n; ++i) { dp[i] = 1LL<<62; for(int j = 0; j < i; ++j) { long long s = sums[i]; s -= sums[j]; long long w = dp[j] + s*(maxj[j]+1+i); cout << i << " " << j << " " << s << " " << w << " " << maxj[j] << endl; if(w < dp[i]) { dp[i] = w; maxj[i] = maxj[j]+1; } } } */ cout << ret << endl; } return 0; }