关于我必须刷dp这回事。
题意:
一颗有$n$个节点的树的中序遍历为$(1,2,3,\dots,n)$,现定义一个根节点的分数为左子树分数*右子树分数+该点分数,定义空子树分数为1,求这棵树最大的分数,输出最大分数和这棵树的前序遍历。
题解:
在想方程之前,先想想二叉树的遍历的方式,中序的遍历为左根右,这点很重要,那我们就可以从后往前逆着推这个区间以k为根的最大值,转移方程为:
$dp_{i,j}=max\{k\in[i,j]|dp[i][k-1]*dp[k+1][j]+a[k]\}$,并且在更新的时候更新一下每个区间的根节点,用$root[i][j]$表示即可。
1 | //I am so vegetable |
- 本文作者: baddog
- 本文链接: https://katoli.github.io/2021/04/16/P1040加分二叉树/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!