大神题。
每个部分分的算法都值得思考。
50pts:状压dp
把节点按深度排序,一定是深度连续的几段,即对应的差分数列只有0/1,在差分数列上进行状压dp,在中间加0,末尾添1。
最外层枚举节点编号保证顺序。
70pts:背包dp
设f[i][j]为含有i个点,深度为j的树的方案数。用带限制的完全背包进行转移。
带限制的一般用个辅助数组好转移。设tmp[i][0/1]表示容量为i是否满足限制的方案数。
$tmp[j][0]=\sum\limits_{k}^{j} \sum\limits_{l=1}^{h-1}(tmp[j-k][0]+f[k][l])$
$tmp[i][1]=\sum\limits_{k}(tmp[j-k][0]+f[k][h])+\sum\limits_{k}\sum\limits_{l=1}^{h}(tmp[j-k][1]+f[k][l])$
$f[i][h]=tmp[i][1]$
顺序不太清楚,不过好像转移的时候加入了顺序。
以上可能不对orz
原文地址:https://www.cnblogs.com/hzoi-yzh/p/11679285.html
时间: 2024-10-09 06:23:56