动态规划基础(2).pptVIP

  • 2
  • 0
  • 约8.16千字
  • 约 47页
  • 2019-10-09 发布于湖北
  • 举报
分析 每门课程最多只有1门直接先修课,如果我们把课程看成结点,也就是说每个结点最多只一个前驱结点。 如果把前驱结点看成父结点,换句话说,每个结点只有一个父结点。显然具有这种结构的模型是树结构,要么是一棵树,要么是一个森林。 这样,问题就转化为在一个M个结点的森林中选取N个结点,使得所选结点的权值之和最大。同时满足每次选取时,若选儿子结点,必选根结点的条件。 样例分析 如图1,为两棵树,我们可以虚拟一个结点,将这些树连接起来,那么森林就转会为了1棵树,选取结点时,从每个儿子出发进行选取。显然选M=4时,选3,2,7,6几门课程最优。 转化为二叉树 如果该问题仅仅只是一棵二叉树,我们对儿子的分配就仅仅只需考虑左右孩子即可,问题就变得很简单了。因此我们试着将该问题转化为二叉树求解。 图2就是对图1采用孩子兄弟表示法所得到的二叉树 动态规划 仔细理解左右孩子的意义(如右图): 左孩子:原根结点的孩子 右孩子:原根结点的兄弟 也就是说,左孩子分配选课资源时, 根结点必须要选修,而与右孩子无关。 因此,我们设f(i,j)表示以i为根结点的二叉树分配j门课程的所获得的最大学分,则有, 0=kjn, i ∈(1..m) 时间复杂度O(mn2) 样例求解过程:初始f(i,0)=0 f(6,1)=6, f(5,1)=max{1,6}=6, f(7,1)=2 f(4,

文档评论(0)

1亿VIP精品文档

相关文档