题意:
      给你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 + 10

typedef 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;
}

hdu1561 树形dp相关推荐

  1. 动态规划 —— 树形 DP

    [概述] 树形动态规划是在树的数据结构上的动态规划,在各个阶段呈现树状关系的时候可以采用树形 DP,其基本思想是由子节点的信息推出父节点的信息. 树形 DP 中,是通过以下 4 点树的特点来进行建图的 ...

  2. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  3. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  4. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  5. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  6. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  7. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  8. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  9. 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)

    题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...

最新文章

  1. python学习 day2 (3月2日)
  2. Laravel 实践之路: 数据库迁移与数据填充
  3. Jenkins中安装Credentials Binding插件时提示:Failed to load: SSH Credentials Plugin (1.18.2),Jenkins(2.282)or
  4. 转载:网口扫盲三:以太网芯片MAC和PHY的关系
  5. Net基础篇_学习笔记_第十二天_面向对象继承(字符串_字符串的不可变性)
  6. QML官方系列教程——QML Applications
  7. 贪心---leetcode-376摆动序列
  8. 7-12 两个数的简单计算器 (10 分)
  9. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)
  10. [BZOJ 3622]已经没有什么好害怕的了(Dp+容斥原理)
  11. window 和虚拟机通过tftp实现文件传输
  12. 计算机二本院校排名民办河北,2020年河北民办二本大学及分数线-河北最好的民办大学学费...
  13. 福特汉姆计算机专业,福特汉姆大学计算机如何
  14. 恢复云数据库MySQL的备份文件到自建数据库总结
  15. PPT基础(一)怎么把图片设置为背景
  16. ubuntu系统文件清理
  17. 一零二一、ERROR StandaloneSchedulerBackend: Application has been killed. Reason: All masters are unrespon
  18. 推荐:基于.NET写的本地搜索工具-EverythingToolbar
  19. ext 中checkbox 无法取消选中行,全选按钮全选问题
  20. 防止DDOS攻击的策略

热门文章

  1. C语言学习笔记(一)_hello world
  2. 规范化的递归转换成非递归
  3. 异构云:另一个烫手的山芋
  4. php中$GLOBALS
  5. 在Struts 2中实现文件上传
  6. Virtual Machine--Vmware(2)
  7. C++线程同步之临界区
  8. 面向 Photoshop 的英特尔® Texture Works 插件
  9. Sql Server 连接池
  10. BZOJ3996 [TJOI2015]线性代数 【最小割】