USACO nocows

来源:互联网 发布:淘宝订单体验 编辑:程序博客网 时间:2024/04/30 02:19

题目大意:给你n个节点,要你组成一个k层的树,这棵树要么只有叶子节点,要么只有孩子个数为2的节点,求树的个数。
题解:我开始做的时候yy出了一个方程,大概是设dp[i][j]表示i个节点,放j层的方案数,那么我们把答案分成两部分,一部分是左右两颗子树深度都一样,另一部分是左右两颗子树深度不同,注意到使树增加一层需要用两个节点接到叶子节点上。由于第一种情况比较简单,这里先讨论第二种情况。
dp[i][j]=k=1i2(dp[k][j1]l=0j2dp[i1k][l])是四方的。所以貌似不可行的样子,想了半天没想出来怎么搞。但是可以看出里面的那个和式的意义是使用一定的节点,层数小于某一层的树的方案数,这个东西也是可以dp的。
f[i][j]表示用i个节点,放小于等于j层的方案数,那么f[i][j]=k=1i2f[k][j1]f[ik1][j1]至此问题便迎刃而解。这里k下界等于1因为根节点要有两个儿子。
这题给我一种感觉就是许多题目的dp都可以转化成小于等于某一条件来dp好搞一点(或者是最大公因数的dp转化成公因数的dp)等等。

0 0