The more, The Better

Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4960    Accepted Submission(s): 2927

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
树型DP+背包问题!
AC码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
#define MAX 205
vector<int> adj[MAX];
int f[MAX][MAX],tot[MAX],weight[MAX];
int m;
int max(int a,int b)
{return a>b?a:b;
}
int DFS(int u)
{tot[u]=1;f[u][1]=weight[u];int i,j,k,v;for(i=0;i<adj[u].size();i++){v=adj[u][i];tot[u]+=DFS(v);}for(i=0;i<adj[u].size();i++){v=adj[u][i];for(j=tot[u];j>=1;j--){for(k=1;k<j&&k<=tot[v];k++)f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]);}}return tot[u];
}
int main()
{int n,i,u;while(~scanf("%d%d",&n,&m)&&(n+m)){for(i=0;i<=n;i++)adj[i].clear();for(i=1;i<=n;i++){scanf("%d%d",&u,&weight[i]);adj[u].push_back(i);}memset(f,0,sizeof(f));m++;DFS(0);printf("%d\n",f[0][m]);}return 0;
}

HDU 1561 The more ,The Better相关推荐

  1. HDU 1561 The more, The Better (树形DP,常规)

    题意:给一个森林,n个节点,每个点有点权,问若从中刚好选择m个点(选择某点之前必须先选择了其父亲),使得这m个点权之和最大为多少? 思路: 比较常规.就是DFS一次,枚举在子树中可能选择的k个点(注意 ...

  2. 【HDU - 1561】The more, The Better(树形背包,dp,依赖背包问题与空间优化,tricks)

    题干: ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城 ...

  3. HDU 1561 The more, The Better

    http://acm.hdu.edu.cn/showproblem.php?pid=1561 树形dp+有依赖的背包.==分组背包. 思路: 思路:参考<背包九讲> 分组背包:将物品分成k ...

  4. hdu 1561 The more, The Better 树形dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1561 做树形dp比较小. 先上网学习下,总结下套路. dp[i][j]表示在第i个节点,有j个名额选的时候的最大 ...

  5. HDU 1561 The more, The Better (树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561 题意不讲了,中文. 树形背包,可以以0为总root,m++.dp[i][j] 表示以i节点为ro ...

  6. hdu 1043 Eight 搜索,哈希

    很早之前做过,总结一下康拓展开哈希大法.当初要是懂了这玩意北京网赛那题一定能出.... http://acm.hdu.edu.cn/showproblem.php?pid=1043题目链接 http: ...

  7. hdu 3395(费用流,二分图的最大权匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3395 解题思路: 这个构图很容易出错,最开始都容易想,把每个点拆开,分为攻击和被攻击的,建图如下: 源 ...

  8. hdu 5230(整数划分,dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5230 解题思路: 这是一个整数划分的模型: 将n划分为k个整数的划分数 设dp[i][j]为将i划分为 ...

  9. HDU(1572),最短路,DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1572 很久没写深搜了,有点忘了. #include <iostream> #include ...

最新文章

  1. python用merge匹配和左连接_左手用R右手Python系列——数据合并与追加
  2. 记录一下halcon例程报错和两个视觉库感兴趣区域绘制
  3. mysql服务remove失败_《MySQL数据库》MySql简介、下载与安装
  4. jquery.zclip轻量级复制失效问题
  5. 1177:奇数单增序列
  6. 移动VS.NET2010帮助文档
  7. FSR 是提高性能和视觉效果
  8. bash复杂脚本解释
  9. 如何查询OS、CPU、内存、硬盘信息
  10. 魔兽世界提取CG最新教程
  11. C++视频教程资源链接合集
  12. 利用pytesseract进行图片文字识别
  13. msf介绍及其常用模块
  14. vxlan报文 wireshark_VXLAN原理_ISIS、BGP、MPLS v隧道、QOS 技术精讲(肖哥)_华为认证视频-51CTO学院...
  15. 用java实现查询年份的生肖
  16. Java中IO的快速复习(代码+注释)
  17. Auto CAD2004完全笔记
  18. 微众银行积极参与公益事业 发扬志愿者精神
  19. 前端工程师就业班Sass基础+进阶+案例开发经验【JS++前端】-艾小野-专题视频课程...
  20. 宅急送 项目第八天 JBPM工作流框架

热门文章

  1. vue开发黑科技--利用引用类型的值处理复杂数据的编辑
  2. 剑指Offer 包含min函数的栈
  3. config之安全(用户认证)
  4. 手把手教你webpack3(3)入口(多入口)entry
  5. jQuery元素过滤
  6. Linux基础第一章 概述
  7. 阅读 Linux 内核源码——共享内存
  8. 程序安装后依然是老版主页的修改办法
  9. 关于armv7指令集的一个直观数据
  10. U3D 贴图通道分离后为什么能减小体积