HDU 1561 The more, The Better 树形DP
The more, The Better
0 1
0 2
0 3
7 4
2 2
0 1
0 4
2 1
7 1
7 6
2 2
0 0
13
题意:
题解:
显然是有多颗树的
对于一棵树假设根节点是x, 那么我们有size[x] 中选择这个遍历的时候DP即可
对于所有的树,做一遍分组背包就好了
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include<vector>
#include <algorithm>
using namespace std;
const int N = 2e2+, M = 1e2+, mod = 1e9+, inf = 1e9+;
typedef long long ll; int n,m,v[N],f[N],dp[N][N],p[N];
vector<int > G[N];
int siz[N];
void dfs(int u) {
siz[u] = ;
dp[u][] = v[u];
int totson = G[u].size();
for(int i=;i<G[u].size();i++) {
int to = G[u][i];
dfs(to);
siz[u] += siz[to];
}
for(int j=;j<totson;j++) {
int v = G[u][j];
for(int i=siz[u];i>=;i--) {
for(int k=;k<i&&k<=siz[u];k++) {
dp[u][i] = max(dp[v][k]+dp[u][i-k] , dp[u][i]);
}
}
}
}
int main() {
while(~scanf("%d%d",&n,&m)) {
if(!n&&!m) break;
int cnt = ;
for(int i=;i<N;i++) G[i].clear();
memset(dp,,sizeof(dp));
memset(f,,sizeof(f));
for(int i=;i<=n;i++) {
int a,b;
scanf("%d%d",&a,&v[i]);
if(a == ) {p[++cnt] = i;continue;}
G[a].push_back(i);
}
for(int i=;i<=cnt;i++) dfs(p[i]);
for(int i=;i<=cnt;i++) {
for(int x=m;x>=;x--)
for(int j=;j<=siz[p[i]]&&j<=x;j++) {
f[x] = max(f[x-j] + dp[p[i]][j],f[x]);
}
}
printf("%d\n",f[m]); }
}
HDU 1561 The more, The Better 树形DP的更多相关文章
- hdu 1561 The more, The Better(树形dp,基础)
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 1520.Anniversary party 基础的树形dp
Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU 1561The more, The Better(树形DP)
HDU 1561 The more, The Better 题目大意就不说了 直接DP[i][j]表示i为跟节点的子树上攻克j个城堡的所能获得的最多宝物的数量 DP[fa][j] = MAX{DP[ ...
- HDU 3586 Information Disturbing(二分+树形dp)
http://acm.split.hdu.edu.cn/showproblem.php?pid=3586 题意: 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超 ...
- HDU 5682 zxa and leaf 二分 树形dp
zxa and leaf 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5682 Description zxa have an unrooted t ...
- HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201 题意:给出一棵树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过 ...
- hdu 4612 Warm up 双连通+树形dp思想
Warm up Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total S ...
- HDU 1054 Strategic Game(最小点覆盖+树形dp)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106048#problem/B 题意:给出一些点相连,找出最小的点数覆盖所有的 ...
- HDU 5977 Garden of Eden (树形dp+快速沃尔什变换FWT)
CGZ大佬提醒我,我要是再不更博客可就连一月一更的频率也没有了... emmm,正好做了一道有点意思的题,就拿出来充数吧=.= 题意 一棵树,有 $ n (n\leq50000) $ 个节点,每个点都 ...
随机推荐
- vm10.0key
5F4EV-4Z0DP-XZHN9-0L95H-02V17
- ACM/ICPC 之 Prim范例(ZOJ1586-POJ1789(ZOJ2158))
两道Prim解法范例题型,简单的裸Prim,且两题相较以边为重心的Kruskal解法而言更适合以点为重心扩展的Prim解法. ZOJ1586-QS Network 题意:见Code 题解:直接的MST ...
- 让最新官方编译的 ffmpeg 在 XP 上 跑起来
下载 fix-ffmpeg-bin.7z , 解压到 ffmpeg 的 bin 目录下, 运行 fixff.cmd 即可. fix-ffmpeg-bin.7z FT ft[]={ {"_wf ...
- jquery若干问题
1.获取服务器端的控件 $("#<%=photopath.ClientID%>").uploadPreview({ Img: "ImgPr", Wi ...
- SqlDateTime 溢出。
SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间 解决方法:不要怀疑自己的判断就是数据库字段里的datatime ...
- 数据库SQL语句
增删改查 --增加 create INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) --删除 delete DELETE FROM 表名 ...
- SAP 凭证类别
文章摘要:基本分为收.付.转三类,和传统的会计凭证分类一样.SA,总帐凭证.(转帐凭证)KA,供应商凭证.(付款凭证)KR,应付供应商凭证.(付款凭证)KG,供应商转来的红字发票,SAP称为贷方凭证. ...
- 解决ERROR 2003 (HY000): Can't connect to MySQL server on
方案一: .打开cmd; .输入命令:net stop +MySQL的服务名,停止MySQL服务,如果未启动MySQL服务则可跳过该步骤: .输入命令:mysqld --remove卸载MySQL服务 ...
- shell之数值运算
Shell中声明变量默认是字符串, 要参与数值运算,可使用下面方式,简单,表示以数值方式.
- window 环境安装MongoDB
强制安装mongodb服务 命令 sc create MongoDB binPath= "D:\MongoDB\Server\3.2\bin\mongod.exe --service --d ...