- #include<cstdio>
- #define INF (1<<30)
- int dp[5000][5000]={},K[5000][5000]={},n,a[5000]={},sum[5000]={};
- int main()
- {
- scanf("%d",&n);
- for (int i=1;i<=n;i++)
- {
- scanf("%d",&a[i]);
- sum[i]=sum[i-1]+a[i];
- K[i][i]=i;
- }
- for (int len=2;len<=n;len++)
- for (int i=1;i<=n-len+1;i++)
- {
- int j=i+len-1;
- dp[i][j]=INF;
- for (int k=K[i][j-1];k<=K[i+1][j];k++)
- if (dp[i][k-1]+dp[k][j]+sum[j]-sum[i-1]<dp[i][j])
- {
- dp[i][j]=dp[i][k-1]+dp[k][j]+sum[j]-sum[i-1];
- K[i][j]=k;
- }
- }
- printf("%d",dp[1][n]);
- return 0;
- }