HDU-1561-树形dp+背包
2018-04-18 16:38
405 查看
The more, The Better
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9169 Accepted Submission(s): 5343
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
Author 8600 注意到宝物之间的关系可以用一颗有向树来表示,0号节点就是根,用f[i][j]表示由i号节点延伸j个节点(包括i在内)可以达到的最大价值,对于当前节点,对他的每一个儿子跑一遍背包,枚举当前儿子包含的节点数k,那么之前所有儿子包含的节点数就是j-k(算上父亲),最后答案就是f[0][m+1]; 注意节点数j要降序枚举否则更新后的数组会影响后面的状态。
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f int first[220],tot; int f[210][210]; struct Edge { int v,next; }e[500]; void add(int u,int v) { e[tot].v=v; e[tot].next=first[u]; first[u]=tot++; } int b[220],M,N; int dfs(int u) { f[u][1]=b[u]; int s=1; for(int i=first[u];~i;i=e[i].next){ int v=e[i].v; int son=dfs(v); s+=son; for(int j=M+1;j>=1;--j){ for(int k=1;j-1>=k&&k<=son;++k){ f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]); } } } return s; } int main() { int n,m,i,j,k; while(cin>>n>>m&&(n||m)){ N=n,M=m; memset(f,0,sizeof(f)); memset(first,-1,sizeof(first)); tot=0; for(i=1;i<=n;++i){ scanf("%d%d",&k,&b[i]); add(k,i); } dfs(0); //cout<<f[1][1]<<' '<<f[2][1]<<' '<<f[3][1]<<endl; cout<<f[0][m+1]<<endl; } return 0; }
相关文章推荐
- HDU 1561 树形dp+背包
- HDU 1561 The more, The Better(树形dp+背包)
- hdu1561 The more, The Better 树形DP+分组背包
- hdu1561 The more, The Better(树形dp+有依赖的背包)
- hdu 1561 The more, The Better(树形dp+背包)
- hdu 1561树形dp+分组背包
- hdu 1561(树形DP+背包)
- HDU 1561 (树形DP+背包)
- HDU 1561 The more, The Better (树形DP+背包)
- hdu 1561 The more, The Better(树形DP+背包)两种建树方式都对
- HDU 1561 The more,The Better (树形DP+有依赖的背包问题)
- hdu 1561 The more, The Better 树形dp+背包
- hdu 1561 树形dp+分组背包
- hdu 1561 (树形dp+依赖背包)
- HDU 1011 Starship Troopers (树形DP+背包)
- hdu1561 树形dp 背包
- HDU 1561 The more, The Better - 依赖背包+树形dp基础
- hdu-1561 The more, The Better (树形dp入门,有依赖的背包问题
- hdu 1561 The more, The Better (树形背包dp)
- hdu 1561 The more, The Better (依赖背包 树形dp)