摘要: 树形dp,顾名思义,就是在“树”的结构下用动态规划求最值。既然是在“树”形的结构下进行的,那么做这类题的第一步是先建树,然后顺着树的结构进行dp,一般从两个方向进行:1. 根—>叶:不过这种动态规划在实际的问题中运用的不多,也没有比较明显的例题。2. 叶->根:既根的子节点传递有用的信息给根,完后根得出最优解的过程。至于状态转移公式,这要具体题目具体分析。呃,来说说这道题。题意:各处含有N个节点的树,问你最少剪去几个边可以得到一颗包含P个节点的子树。思路:dp[i][j]表示以i为根的子树包含j个节点最少剪去的边,若j为1的话dp[i][1] 就等于i的子节点数,然后就是0-1背包 阅读全文
posted @ 2012-08-13 19:51 Misty_1 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 以前做过一道给定高度,然后给出长度让你求拼凑的方法的题,记得是到递推的题,如果这题不是在dp的训练计划里,我一定会耐心的去推公式的。呃,汗.......好吧,来说说这题吧。题意:给出矩形的长和高,然后让你计算用1*2或2*1的小矩形拼凑这个矩形,共有多少种方法?思路:刚才说了,开始我是想推公式来着,然后看了discuss了的一些讨论,才有了点想法,不过思路不是自己的,就不写了,个人觉得,下面这篇日志里讲的就很详细了~http://blog.csdn.net/wmn_wmn/article/details/7773167不过我觉得这题难的不是思路,而是关于二进制位运算的部分,如果不是很了解位运算 阅读全文
posted @ 2012-08-13 15:09 Misty_1 阅读(171) 评论(0) 推荐(0) 编辑