本文出自 http://blog.csdn.net/shuangde800
--------------------------------------------------------------------------------------
题目链接: zoj-3201
题意
给一棵节点带权的树,找到一个有k个节点的子树,求这个子树的最大权值思路
树形dp+背包。f(i, j) 表示以i为根节点的有j个节点子树的最大权值
然后对i的每个子节点做分组背包,因为对于i的每个儿子,可以选择分配
1,2,3...j-1个节点给它
f(i, j) = max{ max{f(i, j-p) + f(v, p) | 1<=p<j} | v是i的儿子节点}
ans = max{ f[i][k] | 0<=i<n && i子树节点个数>=k }
代码
/**=====================================================
* This is a solution for ACM/ICPC problem
*
* @source : zoj-3201 Tree of Tree
* @description : 树形背包dp
* @author : shuangde
* @blog : blog.csdn.net/shuangde800
* @email : zengshuangde@gmail.com
* Copyright (C) 2013/08/31 20:16 All rights reserved.
*======================================================*/
#include
#include
#include
#include
#include
#include
#include
#include
#include