专题训练

 #include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int MAXN=;
const int INF=0x3fffffff;
struct Node
{
int to;
int next;
}edge[MAXN*];
int tol;
int head[MAXN];
int dp[MAXN][];
int price[MAXN][];
int power[MAXN][]; void init()
{
memset(head,-,sizeof(head));
tol=;
}
void add(int a,int b)
{
edge[tol].to=b;
edge[tol].next=head[a];
head[a]=tol++;
edge[tol].to=a;
edge[tol].next=head[b];
head[b]=tol++;
}
int n,m;
int tmp[MAXN];
void dfs(int u,int pre)
{
if(head[u]==-||(edge[head[u]].to==pre&&edge[head[u]].next==-))//叶子结点
{//叶子结点的条件不要错了!!!!
for(int i=;i<=m;i++)dp[u][i]=; for(int i=;i<=m;i++)tmp[i]=dp[u][i];
//因为存在价格为0的点。所以倒序的DP并不能保证只取一件物品
for(int i=m;i>=;i--)
{
for(int j=;j<=price[u][];j++)
if(price[u][j]<=i)
dp[u][i]=max(dp[u][i],tmp[i-price[u][j]]+power[u][j]); tmp[i]=dp[u][i];//tmp数组是记录的dp的上一个状态
}
return;
}
for(int i=;i<=m;i++) dp[u][i]=INF;
for(int i=head[u];i!=-;i=edge[i].next)
{
int v=edge[i].to;
if(v==pre)continue;
dfs(v,u);
for(int j=m;j>=;j--)
{
int t=;
for(int k=;k<=j;k++)//这里k一定要从0开始。
t=max(t,min(dp[u][j-k],dp[v][k]));
dp[u][j]=t;
}
} for(int i=;i<=m;i++)tmp[i]=dp[u][i];
for(int i=m;i>=;i--)
{
for(int j=;j<=price[u][];j++)
if(price[u][j]<=i)
dp[u][i]=max(dp[u][i],tmp[i-price[u][j]]+power[u][j]);
//和上面一样分组背包加了个tmp数组
tmp[i]=dp[u][i];
}
}
int main()
{
int u,v;
int T;
scanf("%d",&T);
while(T--)
{
init();
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d%d",&u,&v);
add(u,v);
}
scanf("%d",&m);
for(int i=;i<=n;i++)
{
scanf("%d",&price[i][]);
power[i][]=price[i][];
for(int j=;j<=price[i][];j++)
{
scanf("%d%d",&price[i][j],&power[i][j]);
}
}
dfs(,);
printf("%d\n",dp[][m]);
}
return ;
}

hdu 4044 2011北京赛区网络赛E 树形dp ****的更多相关文章

  1. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

  2. hdu 4049 2011北京赛区网络赛J 状压dp ***

    cl少用在for循环里 #include<cstdio> #include<iostream> #include<algorithm> #include<cs ...

  3. hdu 4045 2011北京赛区网络赛F 组合数+斯特林数 ***

    插板法基础知识 斯特林数见百科 #include<iostream> #include<cmath> #include<cstdio> #include<cs ...

  4. hdu 4043 2011北京赛区网络赛D 概率+大数 **

    推出公式为:P = A(2n,n)/(2^(2n)*n!) 但是不会大数,学完java再补

  5. hdu 4041 2011北京赛区网络赛B 搜索 ***

    直接在字符串上搜索,注意逗号的处理 #include<cstdio> #include<iostream> #include<algorithm> #include ...

  6. hdu 4046 2011北京赛区网络赛G 线段树 ***

    还带这么做的,卧槽,15分钟就被A了的题,居然没搞出来 若某位是1,则前两个为wb,这位就是w #include<cstdio> #include<cstring> #defi ...

  7. hdu 4035 2011成都赛区网络赛E 概率dp ****

    太吊了,反正我不会 /* HDU 4035 dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点 ...

  8. HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)

    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: ...

  9. hdu 4031 2011成都赛区网络赛A题 线段树 ***

    就是不知道时间该怎么处理,想了好久,看了别人的题解发现原来是暴力,暴力也很巧妙啊,想不出来的那种  -_-! #include<cstdio> #include<iostream&g ...

随机推荐

  1. vtigerCRM5.4的安装和汉化 ubuntu

    由于php5.5经过较大改变,安装vtigercrm的时候可能需要修改一些配置 1.去官网下载vtiger5.4压缩包,解压后放在/var/www目录下 2.简单起见,将目录权限设置为777 vtig ...

  2. IO复用与select函数

    socket select函数的详细讲解 select函数详细用法解析      http://blog.chinaunix.net/uid-21411227-id-1826874.html linu ...

  3. 开源工作流 Bonita BPM (JAVA)

    Bonita BPM 开源工作流 Bonita BPM  (JAVA) http://www.bonitasoft.com/

  4. 【leetcode】Restore IP Addresses

    Restore IP Addresses Given a string containing only digits, restore it by returning all possible val ...

  5. poj 2488

    http://poj.org/problem?id=2488 题意:就是让马把棋盘都走完,每一个点都要走到,出口就是a,b. #include <stdio.h> #include < ...

  6. MongoDB 3.0 新特性【转】

    本文来自:http://www.open-open.com/lib/view/open1427078982824.html#_label3 更多信息见官网: http://docs.mongodb.o ...

  7. shiro错误总结

    今天在做spring+mybatis+springmvc+shiro的时候,报这个错,刚开始以为是shiro登录验证出错,后来,观看一下错误,发现在别的xml中写错了代码,shiro接连着报错,记录一 ...

  8. 【编程题目】有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前 m 个字符匹配...

    37.(字符串)有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前 m 个字符匹配,则两个字符串可以联接,问这 n 个字符串最多可以连成一个多长的字符串,如果出现循环, ...

  9. CCF 最大的矩形

    问题描述 试题编号: 3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个 ...

  10. VB.NET 注册表基本操作

    ''' <summary> ''' 注册表设置值 ''' </summary> ''' <param name="strKey"></pa ...