HDU1561 这应该也是一个很裸的树上背包...
来源:互联网 发布:程序员注释 编辑:程序博客网 时间:2024/06/02 20:18
Problem Description
ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物。但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮ACboy算出要获得尽量多的宝物应该攻克哪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
对于每个测试实例,输出一个整数,代表ACboy攻克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
这个题的思路我认为是把他们先整一棵树上去
然后让M++…
因为比原来预计的多了一个根
然后就是对于每棵子树给他一定的权重让他取最大的这样
我这里的b的W是连子树的根节点都计算在内
因此dp重量为0的全都没有价值
重量为1的价值必须是自己
只要维护好上面两个性质
这题就出来了~
#include<memory.h>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<vector>using namespace std;int n,m,zhi[301],dp[301][301];vector<int>li[301];void maxi(int &a,int b){ if(a<b)a=b;}void dfs(int gen){ if(li[gen].size()==0)return ; for(int a=0;a<li[gen].size();a++) { dfs(li[gen][a]); for(int b=m;b>1;b--) { int y=b; for(int c=0;c<y;c++) { maxi(dp[gen][b],dp[li[gen][a]][c]+dp[gen][y-c]); } } }}int main(){ ios::sync_with_stdio(false); cin.tie(0); while(cin>>n>>m) { if(n==0)break; m++; memset(dp,0,sizeof(dp)); for(int a=0;a<=n;a++)li[a].clear(); memset(zhi,0,sizeof(zhi)); zhi[0]=0; int q,w; for(int a=1;a<=n;a++) { cin>>q>>w; li[q].push_back(a); zhi[a]=w; } for(int a=0;a<=n;a++)for(int b=1;b<=m;b++)dp[a][b]=zhi[a]; dfs(0); cout<<dp[0][m]<<endl; } return 0;}
0 0
- HDU1561 这应该也是一个很裸的树上背包...
- hdu1561 树上分组背包
- HDU1561 The more, The Better 解题报告【树上DP/背包】
- hdu1561有依赖的背包-树形dp
- hdu1561 树形DP+背包
- hdu1561 树形dp 背包
- hdu1561,树形dp+背包
- hdu1561树形背包
- hdu1561 (树形DP_01背包)
- hdu1561 树形背包初探
- HDU4003 树上的分组背包
- 树型DP,树上的背包
- POJ2486 树上背包裸题
- 一个好的程序员应该具备的能力(这也是面试时考察求职者的能力)
- hdu1561树形dp 01背包
- hdu1561(树形DP+背包问题)
- hdu1561树形dp+依赖背包
- HDU1561 树形dp,泛化背包
- opengles之3D模型加载(obj模型文件)
- 关于Recycleview的Inconsistency detected. Invalid view holder adapter positionViewHolder
- Unity JSON 序列化
- cocos2dx physics物理引擎碰撞详解
- 对称加密----AES和DES加密、解密
- HDU1561 这应该也是一个很裸的树上背包...
- 解决Listview的Item与按钮或文本框焦点的问题
- Learning_neutron_command
- ReactiveCocoa入门教程——第二部分
- com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource
- POJ 1821 - Fence
- 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义
- Java String replace() 和 replaceAll()的用法
- 异步线程包装器