hdu 4044 2011北京赛区网络赛E 树形dp ****
专题训练
#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 ****的更多相关文章
- hdu 4050 2011北京赛区网络赛K 概率dp ***
题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...
- hdu 4049 2011北京赛区网络赛J 状压dp ***
cl少用在for循环里 #include<cstdio> #include<iostream> #include<algorithm> #include<cs ...
- hdu 4045 2011北京赛区网络赛F 组合数+斯特林数 ***
插板法基础知识 斯特林数见百科 #include<iostream> #include<cmath> #include<cstdio> #include<cs ...
- hdu 4043 2011北京赛区网络赛D 概率+大数 **
推出公式为:P = A(2n,n)/(2^(2n)*n!) 但是不会大数,学完java再补
- hdu 4041 2011北京赛区网络赛B 搜索 ***
直接在字符串上搜索,注意逗号的处理 #include<cstdio> #include<iostream> #include<algorithm> #include ...
- hdu 4046 2011北京赛区网络赛G 线段树 ***
还带这么做的,卧槽,15分钟就被A了的题,居然没搞出来 若某位是1,则前两个为wb,这位就是w #include<cstdio> #include<cstring> #defi ...
- hdu 4035 2011成都赛区网络赛E 概率dp ****
太吊了,反正我不会 /* HDU 4035 dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点 ...
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others) Memory Limit: ...
- hdu 4031 2011成都赛区网络赛A题 线段树 ***
就是不知道时间该怎么处理,想了好久,看了别人的题解发现原来是暴力,暴力也很巧妙啊,想不出来的那种 -_-! #include<cstdio> #include<iostream&g ...
随机推荐
- EXT Grid celleditor列编辑,动态控制某一单元格只读
listeners : { beforeedit:function(editor, context, eOpts) { if(context.record.data.hasRatio == " ...
- JSON代码格式化 进行查询筛选
JSON是前端编程经常用到的格式,对于PHP或者Python,解析JSON都不是什么大事,尤其是PHP的json_encode和json_decode,干的相当的漂亮.Linux下也有处理处理JSON ...
- Spring Boot+AngularJS中因为跨域导致Session丢失
http://blog.csdn.net/dalangzhonghangxing/article/details/52446821 如果还在为跨域问题烦恼,请查看博主的 解决angular+sprin ...
- 【leetcode】Convert Sorted List to Binary Search Tree
Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...
- Unity3d《Shader篇》漫反射
Unity3d<Shader篇>漫反射 Shader "Custom/Ambient" { Properties { _MainTex ("Base (RGB ...
- ACM/ICPC 之 DFS求解欧拉通路路径(POJ2337)
判断是欧拉通路后,DFS简单剪枝求解字典序最小的欧拉通路路径 //Time:16Ms Memory:228K #include<iostream> #include<cstring& ...
- MySQL 主键范围查找问题
背景: 今天遇到一个主键范围查找的情况: id是主键,每次取10000.上面的这个查询id范围越往后面消耗的时间越久.通过id自增主键去查找数据应该不会出现这个现象的.以前都没有注意这个奇怪的现象,现 ...
- 【leetcode】Regular Expression Matching (hard) ★
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- IOS- 内存管理机制
iOS平台内存常见问题 作为iOS平台的开发者,是否曾经为内存问题而苦恼过?内存莫名的持续增长,程序莫名的crash,难以发现 的内存泄漏,这些都是iOS平台内存相关的常见问题:本文将会详细介绍iOS ...
- JDBC题库
一. 填空题 JDBC ,是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问.它由一组用Java语言编写的类和接口组成. JDBC API:供程序员调用的接口与类,集 ...