1. /*
  2. 树形DP
  3. 根节点一定有人 然后 剩下的人没到每个孩子去
  4. 因为孩子数可能很多 不好枚举 所以转二叉树 分两部分 O(sum)就可以了
  5. 当然 转二叉树候必须顾及原来树的一些性质 如不能只选左孩子
  6. 转化好了之后就是DP了
  7. 写的记忆化 递归每个节点 枚举分给左右孩子的人数
  8. */
  9. #include<iostream>
  10. #include<cstdio>
  11. #include<cstring>
  12. #define maxn 1010
  13. using namespace std;
  14. int n,m,son[maxn][];
  15. int f[maxn][maxn],a[maxn],ans;
  16. int DP(int k,int sum)//到节点k时 还剩sum个人没有用
  17. {
  18. int i,maxx=;
  19. if(f[k][sum]!=)return f[k][sum];//记忆化
  20. if(k==||sum==)return ;//剪枝
  21. f[k][sum]=a[k];//先整一个人在k处
  22. for(i=;i<=sum;i++)//枚举给左孩子多少人 i-1
  23. {
  24. if(DP(son[k][],i-)+a[k]+DP(son[k][],sum-i)>maxx)
  25. maxx=DP(son[k][],i-)+a[k]+DP(son[k][],sum-i);
  26. if(DP(son[k][],i)>maxx)maxx=DP(son[k][],sum);//特殊情况 不要k 只要右孩子
  27. //因为这是多叉树转化来的 所以可以实现相反的 不能只要左孩子 因为左孩子和k连在一起
  28. }
  29. if(f[k][sum]<maxx)
  30. f[k][sum]=maxx;
  31. return f[k][sum];
  32. }
  33. int main()
  34. {
  35. cin>>n>>m;
  36. int i,x,y;
  37. for(i=;i<=n;i++)cin>>a[i];
  38. for(i=;i<=n;i++)
  39. {
  40. cin>>x>>y;
  41. if(son[x][]==)son[x][]=y;
  42. else
  43. {
  44. int fa=son[x][];
  45. while(son[fa][])fa=son[fa][];
  46. son[fa][]=y;
  47. }
  48. }
  49. ans=DP(son[][],m);
  50. cout<<ans;
  51. return ;
  52. }

codevs愚蠢的矿工(树形DP)的更多相关文章

  1. rnqoj-30- [stupid]愚蠢的矿工-树形DP

    把树转化为二叉树,然后再左右DP: #include<stdio.h> #include<string.h> #include<iostream> #include ...

  2. codevs 1380/HDU 1520 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...

  3. codevs 1378 选课 (树形DP)

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; ][],f[] ...

  4. RNQOJ [stupid]愚蠢的矿工(树形依赖背包)

    题意 题目链接 Sol 树形依赖背包板子题 树形依赖背包大概就是说:对于一个点,只有选了它的父亲才能选自身 把dfs序建出来,倒过来考虑 设\(f[i][j]\)表示从第\(i\)个节点往后背包体积为 ...

  5. codevs1486愚蠢的矿工(树形dp)

    1486 愚蠢的矿工  时间限制: 1 s  空间限制: 128000 KB     题目描述 Description Stupid 家族得知在HYC家的后花园里的中央花坛处,向北走3步,向西走3步, ...

  6. 树形DP codevs 1814 最长链

    codevs 1814 最长链  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中 ...

  7. 树形DP+(分组背包||二叉树,一般树,森林之间的转换)codevs 1378 选课

    codevs 1378 选课 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond  题目描述 Description 学校实行学分制.每门的必修课都有固定的学分 ...

  8. RQNOJ:PID30 / [stupid]愚蠢的矿工☆(树形背包)

    PID30 / [stupid]愚蠢的矿工☆ 背景 Stupid 家族得知在HYC家的后花园里的中央花坛处,向北走3步,向西走3步,再向北走3步,向东走3步,再向北走6步,向东走3步,向南走12步,再 ...

  9. 树形DP习题

    听闻noip要考树形DP,本蒟蒻万分惶恐,特刷一坨题目,以慰受惊之心. codevs 1486 /*和非常出名的"选课"是一个题*/ #include<cstdio> ...

随机推荐

  1. 由lib引发的血案(opencv找不函数问题)

    在使用opencv中的函数时,连续两次遇到函数找不到的问题,第一次查时按照他人说的包含进一个头文件后,果真还真解决了:然而第二次在调用cvInpaint函数时包含进对应头文件,编译通过但运行不成功还是 ...

  2. Windows 10正式版密钥大全,Win10激活序列号KEY大全

    最新放出来的Win10密钥:NJ4MX-VQQ7Q-FP3DB-VDGHX-7XM87 MH37W-N47XK-V7XM9-C7227-GCQG9 VK7JG-NPHTM-C97JM-9MPGT-3V ...

  3. C# 关于NULL 可空值类型 ? 和空接操作符??

    作者 陈嘉栋(慕容小匹夫) C#引入了可空值类型的概念.在介绍究竟应该如何使用可空值类型之前,让我们先来看看在基础类库中定义的结构--System.Nullable<T>.以下代码便是Sy ...

  4. TOP命令解析

    转自: http://www.cnblogs.com/yjf512/ 你不一定懂的cpu显示信息 2013-10-23 11:48 by 轩脉刃, 1688 阅读, 0 评论, 收藏, 编辑 在使用t ...

  5. JPA学习笔记

    一.JPA基础1.1 JPA基础JPA: java persistence api 支持XML.JDK5.0注解俩种元数据的形式,是SUN公司引入的JPA ORM规范 元数据:对象和表之间的映射关系 ...

  6. RTF格式文件浅析

    ps:这两天在分析从微软的word复制一个绕排环绕的表格到openoffice的writer中去的bug,需要了解RTF... RTF是Rich TextFormat的缩写,意即多文本格式.这是一种类 ...

  7. CodeForces 588B

    题目链接 : http://codeforces.com/problemset/problem/588/B 题目大意: 这个题目的意思就是找出一个数中的因子,这个因子满足以下条件: 1.此数的因子没有 ...

  8. 数学概念——D 期望

    D - 期望 Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status ...

  9. web前端开发中Nodejs、Grunt、npm等的介绍、使用

    一.Nodejs的安装: Grunt和所有grunt插件都是基于nodejs来运行的,如果你的电脑上没有nodejs,就去安装吧.去 https://nodejs.org/ 上,点击页面中那个绿色.大 ...

  10. React Native专题

    转载注明出处:地址:http://www.lcode.org本文出自:[江清清的技术专栏]本React Native讲解专题:主要讲解了React Native开发,由基础环境搭建配置入门,基础,进阶 ...