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) $ 个节点,每个点都 ...
随机推荐
- ios 多线程必读内容 :锁
大学时的生产者消费者问题还记得吗?ios中的锁,请阅读以下官方文档,虽然是英文的,但是说的非常准确: Threading Programming Guide 中的 Synchronization ht ...
- c语言实现面向对象OOC
这种问题比较锻炼思维,同时考察c和c++的掌握程度.如果你遇到过类似问题,此题意义自不必说.如果用c实现c++,主要解决如何实现封装,继承和多态三大问题,本文分两块说. 1.封装 // Example ...
- ZOJ 3812 We Need Medicine(dp、背包、状态压缩、路径记录)
参考:http://blog.csdn.net/qian99/article/details/39138329 参考的链接里说明得很好,注释也很好...thanks for sharing 朴素的想法 ...
- 打开VS2012的创建单元测试功能
在VS2010中,在类中点击右键,有一个创建创建单元测试命令,可以很方便的生成单元测试项目和代码.但不知道为什么VS2012反而没有这个功能. 网上搜了一下,好在这个功能是可以通过配置打来的. 传送门 ...
- jsp通过s:hidden传值给后台,后台数据出现了若干逗号问题
<s:iterator value="rpActionVO.page.result" id="list" status="st"> ...
- 使用 ODBC .NET 提供程序和 Visual C# .NET 执行 SQL 参数化存储过程
http://support2.microsoft.com/kb/310130/zh-cn 此分步指导文章描述如何使用 ODBC .NET 托管提供程序和 Visual C# .Net 调用参数化 S ...
- stdafx.h的作用
// stdafx.h : include file for standard system include files,// or project specific include files th ...
- Html和CSS的关系
1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是表现.就像网页的外衣.比如,标题字体.颜色变化,或为标题加入背景图片. ...
- mysqli扩展库的预处理技术 mysqli stmt
//预编译演示 //1,创建mysqli对象 $mysqli=new mysqli("localhost","root",""," ...
- 与你相遇好幸运,async解决循环回调问题
由于使用的sailsjs框架,用的是sailsjs自身带的ORm(就是waterline),ORM的默认数据库的返回值在回调里面. > arg是一个数组 count用来计数用 tmpArr临时存 ...