#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
#define MAXN 300
#define INF 0x1f1f1f1f
int n;
int f[MAXN];
int dp[MAXN][MAXN];
int sum[MAXN];
void input()
{
sum[0] = 0;
for( int i = 1; i <= n; i++)
{
scanf("%d",&f[i]);
sum[i] = sum[i-1] + f[i];
}
}
int main()
{
while(scanf("%d",&n) != EOF)
{
input();
memset(dp, 0, sizeof(dp));
for( int k = 1; k < n; k++)
{
for( int i = 1; i + k <= n; i++)
{
dp[i][i+k] = INF;
for( int l = i ; l <= i + k; l++)
{
dp[i][i+k] = min(dp[i][l-1] + dp[l + 1][i+k] + sum[i + k] - sum[i - 1] - f[l] , dp[i][i+k] );
}
}
}
printf("%d\n",dp[1][n]);
}
}
Optimal Binary Search Tree
最新推荐文章于 2023-12-26 12:06:48 发布