HDU_1561_TheMore,TheBetter(有依赖背包&&树状dp)
来源:互联网 发布:淘宝客怎么赚佣金 编辑:程序博客网 时间:2024/05/29 11:50
The more, The Better
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7345 Accepted Submission(s): 4322
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 20 10 20 37 42 20 10 42 17 17 62 20 0
Sample Output
513
Author
8600
Source
HDU 2006-12 Programming Contest
Recommend
LL
题意
给出背包的依赖关系森林
求01背包的最值
解题思路
由于给的是森林
不妨自己建立一个超级根
然后对于每颗子树按照优先对子树做背包dp后对根节点做背包dp的过程处理
初始化时,每个节点各个体积的值全初始化为wi
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;const int M=205;const int MG=205;int ng,mv;//组数int dp[M][M];int n,m;int ne;struct Edge{ int to,nxt;}edge[M];int st[M];void add_edge(int fr,int to){ edge[ne].to=to; edge[ne].nxt=st[fr]; st[fr]=ne++;}void dfs(int rt)//有依赖背包{ //cout<<"dfs "<<rt<<endl; for(int i=st[rt];i!=-1;i=edge[i].nxt) { int t=edge[i].to; if(st[t]!=-1) dfs(t); for(int j=m;j>1;j--)//至少根要选,否则无意义 { for(int k=1;k<j;k++) dp[rt][j]=max(dp[rt][j],dp[rt][k]+dp[t][j-k]); } }}int main(){ int a,b; while(1) { scanf("%d%d",&n,&m); if(!n&&!m) break; m++; //加入超级根 memset(dp,0,sizeof(dp)); ne=0; memset(st,-1,sizeof(st)); for(int i=1;i<=n;i++) { scanf("%d%d",&a,&b); add_edge(a,i); for(int j=1;j<=m;j++) dp[i][j]=b; } dfs(0); printf("%d\n",dp[0][m]); } return 0;}
0 0
- HDU_1561_TheMore,TheBetter(有依赖背包&&树状dp)
- hdoj1010Starship Troopers (树状dp,依赖背包)
- hdu1561有依赖的背包-树形dp
- HDU 3449 Consumer 【有依赖背包】【dp】
- 选课(依赖背包dp)
- POJ_2486_AppleTree(树状DP&&01背包)
- WUSTOJ 1878 金明的预算方案(有依赖的背包/树形DP)
- HDU 1561 树形DP+有依赖的背包
- HDU 1011 Starship Troopers---树形dp+有依赖的背包
- hdu 1011 树型DP(依赖背包)
- poj 1947 树型DP(依赖背包)
- (树形dp 依赖背包)hdu1561
- hdu 1561 (树形dp+依赖背包)
- 物品选择(有依赖背包问题)
- HDU3449 Consumer(有依赖背包)
- 有依赖的背包问题(背包九讲)
- POJ1947(树状DP+背包问题)
- poj 1155 树状dp + 背包
- hdu 5363 Key Set
- android 调用系统相机或者系统相册功能时,onActivityResult方法不执行问题的解决过程
- TCP及DNS协议(3)
- hdu3899(树形dp)
- Android中ContentProvider简介
- HDU_1561_TheMore,TheBetter(有依赖背包&&树状dp)
- III
- Handler使用引起内存泄漏分析
- 添加网卡驱动和USB支持 以及一些问题的集中处理
- Idea的配置与maven项目导入步骤
- java基础--12.Scanner和String类
- 广义表的head与tail的基本用法
- Docker 构建JAVA 应用环境
- 利用python发出rs232信号