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 Optimal Binary Search Tree (区间dp)

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

UVA - 10304 Optimal Binary Search Tree

题意:给定一个序列S= (e1, e2, ..., en),将这些序列构成一个二叉搜索树,要求按深度*频率的总权值最小,根节点深度为0,跟矩阵连乘相似,显然这题具有最优子结构,所以我们假设dp[i][...
  • u011345136
  • u011345136
  • 2013年09月18日 19:14
  • 520

UVa 10304 Optimal Binary Search Tree / 区间DP

还是很弱 二叉树啊 没忘区间dp想啊 搜解题报告了 使劲戳这里吧 http://blog.csdn.net/hcbbt/article/details/15776963 看懂了姐写了个记忆化搜索 #i...
  • u011686226
  • u011686226
  • 2014年03月10日 19:54
  • 773

uva 10304 Optimal Binary Search Tree(DP)

Problem E Optimal Binary Search Tree Input: standard input Output: standard output Time Limit: 3...
  • u011836218
  • u011836218
  • 2014年01月06日 00:01
  • 431

uva 10304 - Optimal Binary Search Tree

Problem E Optimal Binary Search Tree Input: standard input Output: standard output Time Limit: 3...
  • u012866104
  • u012866104
  • 2014年08月04日 15:48
  • 319

UVA 10304 Optimal Binary Search Tree

大意略。 思路:参见《算法导论》P215. #include #include #include #include #include using namespace std; cons...
  • Wall_F
  • Wall_F
  • 2013年02月02日 22:03
  • 496

uva 10304 Optimal Binary Search Tree(dp)

Optimal Binary Search Tree Input: standard input Output: standard output Time Limit: 30 seconds ...
  • Wiking__acm
  • Wiking__acm
  • 2014年08月23日 12:02
  • 540

10304 - Optimal Binary Search Tree

描述:从最优二叉树到最优二叉查找树,类似于哈夫曼树,不过是和最小的哈夫曼树,主要问题是选取结点,状态方程v[l][j]=min(v[l][j],v[l][k-1]+v[k+1][j]+sum[j]-s...
  • moyan_min
  • moyan_min
  • 2013年05月07日 19:23
  • 1171

UVA - 10304 Optimal Binary Search Tree 区间DP

题目大意:有一棵二叉树,二叉树的最终值 = sum (  节点的值 * (所在高度-  1) ),这是一棵搜索二叉树,所以左子树的所有节点的值是小于等于根节点,右子树的所有节点的值是大于等于根结点的,...
  • L123012013048
  • L123012013048
  • 2014年12月19日 09:57
  • 410

Optimal Binary Search Tree - UVa 10304

Problem E Optimal Binary Search Tree Input: standard input Output: standard output Time Limit: 3...
  • u014733623
  • u014733623
  • 2014年08月08日 00:08
  • 336
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa 10304 - Optimal Binary Search Tree
举报原因:
原因补充:

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