UVa 10304 - Optimal Binary Search Tree

原创 2016年06月02日 12:45:17

題目:給定一串有序數字f,生成一個BST,使得Σ deep(i)* f(i)最小。

分析:動態規劃,區間dp。按長度遞增枚舉區間。

            狀態方程 f(s,e)= min(f(s,k-1)+ f(k+1,e)+ sum(s,e) - f(k))。

說明:很久沒有寫dp了╮(╯▽╰)╭。

#include <cstring>
#include <cstdio>

int frequency[255];
int interval[255][255];
int cost[255][255];

int main()
{
	int n;
	while (~scanf("%d",&n)) {
		for (int i = 1; i <= n; ++ i) {
			scanf("%d",&frequency[i]);
		}
		
		// 计算区间和,子树整体深度+1时,子树权值增加区间和 
		memset(interval, 0, sizeof(interval));
		for (int i = 1; i <= n; ++ i) {
			interval[i][i-1] = 0;
			for (int j = i; j <= n; ++ j) {
				interval[i][j] = interval[i][j-1] + frequency[j];
			}
		}
		
		// 区间dp,枚举区间中的每个点作为根时的值,取最小值 
		memset(cost, 0, sizeof(cost));
		for (int l = 2; l <= n; ++ l) {
			for (int s = 1; s+l-1 <= n; ++ s) {
				int e = s+l-1;
				cost[s][e] = 10000000;
				for (int k = s; k <= e; ++ k) {
					int Ltree = cost[s][k-1] + interval[s][k-1];
					int Rtree = cost[k+1][e] + interval[k+1][e];
					if (cost[s][e] > Ltree + Rtree) {
						cost[s][e] = Ltree + Rtree;
					}
				}
			}
		}
		printf("%d\n",cost[1][n]);
	}
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

uva 10304(dp)

题意:给出n个结点,建立一个二叉搜索树,求这棵树的最小值(每个结点×它的深度的总和)。 题解:dp[i][j]数组保存从结点i到j的组成的树的最小值,dp的思想是先从小到大计算有num个结点组成这棵...

uva-10304 Optimal Binary Search Tree(区间dp)

题意 给一个序列即可 S = (e1,e2,...,en),且e1

uva 10304 Optimal Binary Search Tree (区间DP)

uva 10304 Optimal Binary Search Tree题目大意:给出N个结点(已知每个结点的权值)来建树,建树时要满足以下规则:左子树的节点的值要全小于父节点,右子树的节点的值要全大...

UVA10304-Optimal Binary Search Tree(最优二分检索树)

Optimal Binary Search TreeGiven a set S = (e1, e2, …, en) of n distinct elements such that e1 < e2 <...
  • algzjh
  • algzjh
  • 2017年05月26日 09:19
  • 207

UVa 10304. Optimal Binary Search Tree

题意为给出一组从小到大的数据的频率,要求建一棵二叉查找树,使得总的cost最低。TotalCost= PathLength【i】*fre【i】+...; 题目较简单,一下就看出了状态和转移方程。 ...

uva 10304 Optimal Binary Search Tree

uva 10304 Optimal Binary Search Tree

DP优化——四边形不等式 uva 10304 - Optimal Binary Search Tree

// 原文地址 http://www.cnblogs.com/zxndgv/archive/2011/08/02/2125242.html 今天学习了一下四边形不等式,这个东西很早以前就看过,但是...
  • count24
  • count24
  • 2012年02月01日 20:17
  • 302

UVA 10304 Optimal Binary Search Tree (区间dp)

题目大意:二叉搜索树的左子树的节点一定比当前节点小,右子树的的节点一定比当前节点大。 要求建一棵二叉查找树,使得总的cost最低。 sum = f(e1)*cost(e1) + f(e2)*cos...

UVA | Optimal Binary Search Tree

原题题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=514&page=show_...

10304 Optimal Binary Search Tree

/* 最优搜索二叉树,典型动态规划题,AC 搜索二叉树首先满足二叉树中序遍历是自小变大的,最优搜索二叉树则要求每个节点的路径长和它出现的概率之积的和最小。 最优搜索二叉树的左子树和右子树必须也是最优...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa 10304 - Optimal Binary Search Tree
举报原因:
原因补充:

(最多只允许输入30个字)