ZOJ 3201 Tree of Tree
来源:互联网 发布:mac os x 10.11.6 u盘 编辑:程序博客网 时间:2024/05/17 02:50
Tree of Tree
简单Tree DP. 求一个含有k个节点的子树,使得子树上所有节点的权值和最大。方程:dp[i][j] 表示以i为根的子树中选取j个点所能获得最大值,其中i点必须选,然后就是直接使用分组背包就可以了。
/* *author : csuchenan *Prog : ZOJ 3201 *Algorithm : Tree DP dp[i][j] 以i为根 * 的子树中选取j个点的最大值,i点必须选 *Accepted 3201C++0ms224KBchenan*/#include <cstdio>#include <cstring>#include <vector>using std::vector ;#define maxn 105int num[maxn] ;int dp[maxn][maxn] ;vector<int> G[maxn] ;int n , K ;void init(){ for(int i = 0 ; i <= n ; i ++){ G[i].clear() ; } memset(dp , 0 , sizeof(dp)) ;}bool read(){ if(scanf("%d%d" , &n , &K) == EOF) return 0 ; init() ; for(int i = 0 ; i < n ; i ++) scanf("%d" , &num[i]) ; int p , q ; for(int i = 1 ; i < n ; i ++){ scanf("%d%d" , &p , &q) ; G[p].push_back(q) ; G[q].push_back(p) ; } return 1 ;}int dfs(int v , int f){ int cnt = 1 ; for(int i = 0 ; i != G[v].size() ; i ++){ int u = G[v][i] ; if(u == f) continue ; cnt += dfs(u , v) ; } int tmp = cnt > K ? K : cnt ; for(int i = 0 ; i != G[v].size() ; i ++){ int u = G[v][i] ; if(u == f) continue ; for(int j = tmp ; j >= 1 ; j --){ for(int t = 1 ; t < j ; t ++){ if(dp[v][j] < dp[v][j - t] + dp[u][t]){ dp[v][j] = dp[v][j - t] + dp[u][t] ; } } } } for(int t = 1 ; t <= tmp ; t ++){ dp[v][t] += num[v] ; } return cnt ;}void solve(){ int ans = 0 ; dfs(0 , -1) ; for(int i = 0 ; i < n ; i ++){ ans = ans > dp[i][K] ? ans : dp[i][K] ; } printf("%d\n" , ans);}int main(){ while(read()){ solve() ; } return 0 ;}
- ZOJ 3201 Tree of Tree
- ZOJ 3201 Tree of Tree
- ZOJ - 3201 Tree of Tree
- Zoj 3201 Tree of Tree
- ZOJ 3201 Tree of Tree
- ZOJ - 3201 Tree of Tree
- ZOJ 3201 Tree of Tree 树形DP
- ZOJ - 3201 Tree of Tree 树形DP
- ZOJ 3201 Tree of Tree 大水树形背包
- zoj 3201 简单树形dp Tree of Tree
- ZOJ 3201 Tree of Tree(树形背包DP)
- ZOJ 3201 Tree of Tree(树形DP)
- zoj 3201 Tree of Tree(树形背包dp)
- TOJ 2676 ZOJ 3201 Tree of Tree / 树形DP
- ZOJ 3201 Tree of Tree(树形dp + 分组背包)
- ZOJ 3201 Tree of Tree(树形DP+背包)
- 【树形dp】ZOJ-3326-Tree of Tree
- zoj 3516 Tree of Three
- 某公司笔试题:编程实现去除字符串中连续出现一次以上的空格。
- 调试心得——以HDU-1010为例
- Linux 多线程通信
- 导入phpmyadmin导出的大文件
- Hibernate 原理 快速入门 详解 经典总结
- ZOJ 3201 Tree of Tree
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-1
- SQL数字函数大全
- error:Target dll has been cancelled.debugger aborted
- Soft Margin VS Hard Margin
- hunnu 11264 A Classic Myth: Flatland Superhero (凸包)
- HDOJ 2492 Ping pong 线段树+离散化
- 网络编程-Socket类端口扫描器
- strlen, strcpy, strcmp函数的实现