cdoj 1136 邱老师玩游戏 树形背包
邱老师玩游戏
Time Limit: 20 Sec
Memory Limit: 256 MB
题目连接
http://acm.uestc.edu.cn/#/problem/show/1136
Description
邱老师最近在玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中邱老师允许攻克M个城堡并获得里面的宝物。
但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮邱老师算出要获得尽量多的宝物应该攻克哪M个城堡吗?
Input
每个测试实例首先包括2个整数,N,M.(1 <= M <= N <= 200);
在接下来的N行里,每行包括2个整数,a,b.
在第 i 行,a 代表要攻克第 i 个城堡必须先攻克第 a 个城堡,如果 a = 0 则代表可以直接攻克第 i 个城堡。b 代表第 i 个城堡的宝物数量, b >= 0。
当N = 0, M = 0输入结束。
Output
对于每个测试实例,输出一个整数,代表邱老师攻克M个城堡所获得的最多宝物的数量。
Sample Input
3 2
0 1
0 2
0 3
7 4
2 2
0 1
0 4
2 1
7 1
7 6
2 2
0 0
Sample Output
5
13
HINT
题意
题解:
树形背包,可以理解为一共有n+1个点,只有n条边,然后我们以0点为根
跑裸的树形01背包就好了
代码
#include<iostream>
#include<stdio.h>
#include<vector>
#include<cstring>
using namespace std; vector<int> Q[];
long long dp[][];
int vis[];
int b[];
int n,m;
void dfs(int x)
{
if(vis[x])return;
vis[x]=;
dp[x][]=b[x];
for(int i=;i<Q[x].size();i++)
{
int v = Q[x][i];
dfs(v);
for(int j=m;j>=;j--)
for(int k=;k<j;k++)
dp[x][j]=max(dp[x][j],dp[v][k]+dp[x][j-k]);
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==&&m==)break;m++;
for(int i=;i<=n;i++)
Q[i].clear();
memset(vis,,sizeof(vis));
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
{
int x;scanf("%d%d",&x,&b[i]);
Q[x].push_back(i);
}
dfs();
printf("%lld\n",dp[][m]);
}
}
cdoj 1136 邱老师玩游戏 树形背包的更多相关文章
- TTTTTTTTTTTTT  CDOJ  1136  邱老师玩游戏   树形dp
		
邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
 - 邱老师玩游戏(树形DP) UESTC - 1136
		
邱老师最近在玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中邱老师允许攻克M个城堡并获得里面的宝物. 但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其 ...
 - UESTC 2015dp专题 G 邱老师玩游戏 背包dp
		
邱老师玩游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descr ...
 - [dp uestc oj] G - 邱老师玩游戏
		
G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
 - UESTC_邱老师玩游戏 2015 UESTC Training for Dynamic Programming<Problem G>
		
G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
 - CDOJ 1135  邱老师看电影  概率dp
		
邱老师看电影 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
 - UESTC_邱老师看电影 2015 UESTC Training for Dynamic Programming<Problem F>
		
F - 邱老师看电影 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
 - UESTC 2015dp专题 F 邱老师看电影 概率dp
		
邱老师看电影 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descr ...
 - HDU 1561 The more, The Better(树形背包)
		
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
 
随机推荐
- xcode升级,报错 libxml/tree.h not found (Xcode4.6解决方案)
			
转:http://blog.csdn.net/yangxuanlun/article/details/8639075 Xcode升级到4.6以后,他妈的,libxml/tree.h找不到了,搞了大半天 ...
 - hdu 3635 Dragon Balls(加权并查集)2010 ACM-ICPC Multi-University Training Contest(19)
			
这道题说,在很久很久以前,有一个故事.故事的名字叫龙珠.后来,龙珠不知道出了什么问题,从7个变成了n个. 在悟空所在的国家里有n个城市,每个城市有1个龙珠,第i个城市有第i个龙珠. 然后,每经过一段时 ...
 - hdu 2459 (后缀数组+RMQ)
			
题意:让你求一个串中连续重复次数最多的串(不重叠),如果重复的次数一样多的话就输出字典序小的那一串. 分析:有一道比这个简单一些的题spoj 687, 假设一个长度为l的子串重复出现两次,那么它必然会 ...
 - 开启Ubuntu Linux下VirtualBox访问USB功能
			
解决方法如下: 1.增加用户组usbfs sudo groupadd usbfs 2.查看usbfs用户组的gid cat /etc/group | grep usbfs usbfs:x:1002: ...
 - kettle实现文本文件数据抽取方法
			
KETTLE做调度的思路是,把一个有特定格式的的文本文件,写入ORACLE数据库表, 具体方法见如下操作: 首先来看下文本文件的内容: 1|test1 2|test2 3|test3 通过|进行分割的 ...
 - delphi 设置表格样式。
			
//设置表格样式 wordDoc.Tables.Item(1).Borders.Item(Word.WdBorderType.wdBorderLeft).LineStyle = Word.WdLine ...
 - libpomelo的cocos2d-x客户端使用总结
			
这几天看了libpomelo的cocos2dx客户端这是个聊天室,由2个场景构成,登录场景LoginScene,聊天场景ChatScene. 一. LoginScene 客户端是以Login场景来启动 ...
 - QT-【转】Qt 4迁移至Qt 5
			
将Qt 4代码迁移到Qt 5还是比较简单的.实际上,在Qt 5开发过程中就已经注意了与Qt 4代码保持兼容性. 与Qt 3到Qt 4的迁移不同,Qt 5的核心类库并没有做大的API的修改,只有几个新的 ...
 - php里面为什么header之前有输出报错 源码分析
			
众所周知,php 里面 header之前有输出的话,会报错,例如下面这样 就这个错误,我们开始查阅php源代码,到底是怎样做的,至于php源代码分析,安装,和调试时怎样配置的,我会专门写一篇文章去 ...
 - 多校7 HDU5818 Joint Stacks
			
多校7 HDU5818 Joint Stacks 题意:n次操作.模拟栈的操作,合并的以后,每个栈里的元素以入栈顺序排列 思路:开三个栈,并且用到了merge函数 O(n)的复杂度 #include ...