#include #include #include #include using namespace std; int n, a[501], b[501], dp[501][501]; void in() { scanf("%d", &n); scanf("%d", &a[0]); b[0] = a[0]; for (int i = 1; i < n; i++) { scanf("%d", &a[i]); b[i] = b[i - 1] + a[i]; } } int solve(int i, int j) { if (i == j) return 0; if (dp[i][j] != -1) return dp[i][j]; int ans = numeric_limits::max(); for (int k = i; k < j; k++) ans = min(ans, b[j] - b[i] + a[i] + solve(i, k) + solve(k + 1, j)); return dp[i][j] = ans; } int main() { in(); memset(dp, -1, sizeof(dp)); printf("%d\n", solve(0, n - 1)); return 0; }