题目: 思路: (递归,DP)- 记binary search tree的N个节点分别为 1, 2, 3, ..., N
- 记frequency[n]为第n个节点的frequency值
- 记sumFrequency(l,r)为从l到r的节点的frequency和。
- 记minTreeCost(i,l,r)是root节点为i, 所有节点为l到r的BST的cost,其中l <= i <= r。
minTreeCost(i,l,r) = minCost(l,i-1) + sumFrequency(l,i-1) + minCost(i+1,r) + sumFrequency(i+1,r) - 记minCost(l,r)为节点为l,l+1,l+2,...r的BST的最小cost (1 <= l,r <= N)。那么我们所求的BST的最小cost就可以表示为minCost(1,N)。可以看出,minCost(l,r)是个不变值,因此我们可以用一个数组记下来,不必重复计算,这就是DP。
minCost(l,r) = MIN { minTreeCost(l,l,r), minTreeCost(l+1,l,r),..., minTreeCost(r,l,r) }
代码:
阅读(873) | 评论(0) | 转发(0) |