/*
DP: Optimal Binary Search Tree
*/
#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;
const int INF = 1<<30;
const int MAXN = 255;
int A[MAXN];
int n;
int d[MAXN][MAXN];
int w[MAXN][MAXN];
void dp()
{
for(int l=1; l<=n; l++) {
for(int i=0; i<=n-l; i++) {
int j = i+l;
w[i][j] = w[i][j-1] + A[j-1];
if(l==1) continue;
int m = INF;
int s;
for(int k=i; k<j; k++) {
s = d[i][k] + d[k+1][j] + w[i][k] + w[k+1][j];
if(s < m) m = s;
}
d[i][j] = m;
}
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
while(scanf("%d", &n) == 1) {
for(int i=0; i<n; i++) {
scanf("%d", &A[i]);
}
dp();
printf("%d\n", d[0][n]);
}
return 0;
}
UVa 10304 - Optimal Binary Search Tree
最新推荐文章于 2026-02-14 07:32:28 发布
本文详细介绍了如何使用动态规划(DP)解决最优二叉搜索树问题,包括算法设计、代码实现及实例分析。

761

被折叠的 条评论
为什么被折叠?



