int s[MAX_N], f[MAX_N][MAX_N];
int stone_merge(int n, int a[]) {
for (int i = 1; i <= n; i++)
s[i] = s[i - 1] + a[i];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (i == j)
f[i][j] = 0;
else
f[i][j] = MAX_F;
for (int l = 1; l < n; l++)
for (int i = 1; i <= n - l; i++) {
int j = i + l;
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]);
}
return f[1][n];
}