hdu1561 树形dp
来源:互联网 发布:2016美国经济非农数据 编辑:程序博客网 时间:2024/06/05 02:29
题意:
给你n个东西,每个东西有自己的价值,让你从里面最多取出m个物品,问最大的价值,有的物品有限制,就是必须先取出某个物品后才能取出这个物品。
思路:
给你n个东西,每个东西有自己的价值,让你从里面最多取出m个物品,问最大的价值,有的物品有限制,就是必须先取出某个物品后才能取出这个物品。
思路:
树形dp,应该是树形的01背包吧,自己dp太渣了,看题解看了好久才懂,我对于树形dp的理解目前是 树形第dp就是用树的节点关系,来约束dp更新是的顺序,比如必须更新完子节点才能更新父节点什么的,对于这个题目,我们首先把给的限制关系建立成一个树,取a之前必须取b,那么 add(b ,a),然后开两个数组dp[i][j] 表示的是 以第i个为根节点的时候取了j个物品的最优值tmp[i][j] 则是dp的一个临时值,目的是为了先更新i为根节点的所有子节点,然后在强制吧i加进去,整体的思路就是先更新后面的(后面的就是前面有很长限制的)然后在更新前面的,前面的每一个都是强制更新进去的,保证了正确性,具体看代码。
#include<stdio.h>#include<string.h>#define N 200 + 10typedef struct{ int to ,next;}STAR;STAR E[N];int list[N] ,tot;int mark[N] ,cost[N];int dp[N][N] ,tmp[N][N];void add(int a ,int b){ E[++tot].to = b; E[tot].next = list[a]; list[a] = tot;}int maxx(int x ,int y){ return x > y ? x : y;}void DFS(int root ,int m){ mark[root] = 1; for(int k = list[root] ;k ;k = E[k].next) { int to = E[k].to; if(mark[to]) continue; DFS(to ,m); for(int i = m ;i >= 0 ;i --) for(int j = 0 ;j <= i ;j ++) tmp[root][i] = maxx(tmp[root][i] ,tmp[root][i-j] + dp[to][j]); } for(int i = 1 ;i <= m + 1 ;i ++) dp[root][i] = tmp[root][i-1] + cost[root];}int main (){ int i ,n ,m ,a ,b; while(~scanf("%d %d" ,&n ,&m) && n + m) { memset(list ,0 ,sizeof(list)) ,tot = 1; memset(mark ,0 ,sizeof(mark)); memset(tmp ,0 ,sizeof(tmp)); memset(dp ,0 ,sizeof(dp)); for(i = 1 ;i <= n ;i ++) { scanf("%d %d" ,&a ,&b); add(a ,i); cost[i] = b; } DFS(0 ,m); printf("%d\n" ,dp[0][m+1]); } return 0;}
0 0
- hdu1561 树形DP+背包
- hdu1561树形DP入门
- hdu1561 树形dp 背包
- hdu1561之树形dp
- hdu1561,树形dp+背包
- hdu1561树形dp
- hdu1561 树形dp
- hdu1561(树形dp)
- hdu1561(树形dp)
- 树形dp-hdu1561
- hdu1561 树形DP
- HDU1561【树形DP】
- hdu1561 树形dp
- HDU1561 树形DFS+DP
- hdu1561树形dp 01背包
- hdu1561(树形DP+背包问题)
- hdu1561树形dp+依赖背包
- HDU1561 树形dp,泛化背包
- Windows8.1驱动编写以及内核调试(一) 做好准备工作并编写第一个驱动程序
- 请问学习的方向在哪里
- SPOJ 1825 Free tour II 解题报告(树分治)
- NSDictionary一些常用用法
- C中和C++中static的作用?
- hdu1561 树形dp
- OpenCV Haar AdaBoost源码改进(比EMCV快6倍)
- argv是一个指针
- Python 中对文本框内容是否为非负整数的检判别
- 排序
- Linux下MySQL定时备分脚本
- 657 - The die is cast
- Struts2之自定义类型转换器
- 自己写的android滑动调出隐藏设置菜单