/*
树形DP
根节点一定有人 然后 剩下的人没到每个孩子去
因为孩子数可能很多 不好枚举 所以转二叉树 分两部分 O(sum)就可以了
当然 转二叉树候必须顾及原来树的一些性质 如不能只选左孩子
转化好了之后就是DP了
写的记忆化 递归每个节点 枚举分给左右孩子的人数
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int n,m,son[maxn][];
int f[maxn][maxn],a[maxn],ans;
int DP(int k,int sum)//到节点k时 还剩sum个人没有用
{
int i,maxx=;
if(f[k][sum]!=)return f[k][sum];//记忆化
if(k==||sum==)return ;//剪枝
f[k][sum]=a[k];//先整一个人在k处
for(i=;i<=sum;i++)//枚举给左孩子多少人 i-1
{
if(DP(son[k][],i-)+a[k]+DP(son[k][],sum-i)>maxx)
maxx=DP(son[k][],i-)+a[k]+DP(son[k][],sum-i);
if(DP(son[k][],i)>maxx)maxx=DP(son[k][],sum);//特殊情况 不要k 只要右孩子
//因为这是多叉树转化来的 所以可以实现相反的 不能只要左孩子 因为左孩子和k连在一起
}
if(f[k][sum]<maxx)
f[k][sum]=maxx;
return f[k][sum];
}
int main()
{
cin>>n>>m;
int i,x,y;
for(i=;i<=n;i++)cin>>a[i];
for(i=;i<=n;i++)
{
cin>>x>>y;
if(son[x][]==)son[x][]=y;
else
{
int fa=son[x][];
while(son[fa][])fa=son[fa][];
son[fa][]=y;
}
}
ans=DP(son[][],m);
cout<<ans;
return ;
}

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. python中归并排序

    # coding=UTF-8 #!/usr/bin/python import sys def merge(nums, first, middle, last): "merge" ...

  2. 关于asp.net core部署到iis中出现 HTTP Error 502.5 - Process Failure的问题

    环境是windows Server2008R2 出现这个问题搞了一下午都没解决,最后又加班才算搞定,由于英文不太好,官方的文档看了好几遍,也按照文档做的,但还是出现这个问题,百度google搜了很多解 ...

  3. iscc2016-basic-find-to-me

    额 第一题就暴力搜索了 已知仿射加密变换为c=(11m+8)mod26,试对密文sjoyuxzr解密 #include <stdio.h> int main(void) { int m,c ...

  4. 在iOS7中修改状态栏字体的颜色-b

    状态栏的字体为黑色: UIStatusBarStyleDefault 状态栏的字体为白色: UIStatusBarStyleLightContent 一.在 info.plist  中,将 View ...

  5. jQuery取CSS的HEX(16位)颜色值

    //IE10以上版本.CHROME.FIREFOX中GRB颜色转HEX颜色值 $.fn.getBackgroundColor = function() { var rgb = $(this).css( ...

  6. [BZOJ 2004] [Hnoi2010] Bus 公交线路 【状压DP + 矩阵乘法】

    题目链接: BZOJ - 2004 题目分析 看到题目完全不会..于是立即看神犇们的题解. 由于 p<=10 ,所以想到是使用状压.将每个连续的 p 个位置压缩成一个 p 位 2 进制数,其中共 ...

  7. Ubuntu 中使用 谷歌日历

    简介 对于经常使用待办类软件的人来说,谷歌日历是个不错的选择.但每次,都要登录网页去查看,对于我这样的懒人来说似乎麻烦了些. 所以在网上找了个叫做 Calendar Indicator 的软件. 效果 ...

  8. bzoj3192

    把堆顶和堆顶接起来,然后用树状数组模拟即可不得不说一开始我竟然把100000*100000当成不超出longint 而忘开int64,无药可救…… ..] of longint; now,n1,n2, ...

  9. phpMyAdmin 完整路径泄露漏洞2

    漏洞名称: phpMyAdmin 完整路径泄露漏洞 CNNVD编号: CNNVD-201307-651 发布时间: 2013-08-09 更新时间: 2013-08-09 危害等级: 中危   漏洞类 ...

  10. 数学(矩阵乘法):HDU 4565 So Easy!

    So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...