题目:

链接:点击打开链接

题意:

非常明显的依赖背包。

思路:

dp[i][j]表示以i为根结点时攻击j个城堡得到的最大值。(以i为根的子树选择j个点所能达到的最优值)

dp[root][j] = max(dp[root][j],dp[root][k]+dp[u][j-k]);

u递归根结点,root当前根结点,每一个城堡之间的依赖关系形成森林。应该转化为树。再树形dp。仅仅需添加一个根结点即可。m++。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 220int num[MAXN];
int map[MAXN][MAXN];//存树
int dp[MAXN][MAXN];
int vis[MAXN];
int n,m;void dfs(int root)
{vis[root] = 1;for(int i=1; i<=num[root]; i++){int u = map[root][i];if(!vis[u])dfs(u);for(int j=m; j>=2; j--){for(int k=1; k<j; k++){if(dp[u][j-k] != -1 && dp[root][k] != -1)dp[root][j] = max(dp[root][j],dp[root][k]+dp[u][j-k]);}}}
}int main()
{//freopen("input.txt","r",stdin);int a,b;while(scanf("%d%d",&n,&m) != EOF && (n || m)){memset(vis,0,sizeof(vis));memset(dp,0,sizeof(dp));memset(num,0,sizeof(num));for(int i=1; i<=n; i++){scanf("%d%d",&a,&b);dp[i][1] = b;num[a]++;map[a][num[a]] = i;}m++;for(int i=0; i<=n; i++){dp[i][0] = 0;for(int j=2; j<=m; j++)dp[i][j] = -1;}dfs(0);printf("%d\n",dp[0][m]);}return 0;
}
</span>

-----------------------------------------------------------------------------------------

依赖背包的入门题。没可以自己写出来

---------------------------------------------------------------------------------------

战斗。永不停歇~~~~~~~~~~~~~~~~~~

转载于:https://www.cnblogs.com/mengfanrong/p/5164636.html

hdu 1561 The more, The Better (依赖背包 树形dp)相关推荐

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

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

  2. HDU 5575 Discover Water Tank 并查集 树形DP

    题意: 有一个水槽,边界的两块板是无穷高的,中间有n-1块隔板(有高度),现有一些条件(i,y,k),表示从左到右数的第i列中,在高度为(y+0.5)的地方是否有水(有水:k = 1),问最多能同时满 ...

  3. [SHOI 2015] 聚变反应炉(树形背包 + 树形 DP) | 错题本

    文章目录 题目 分析 代码 题目 [SHOI 2015] 聚变反应炉 分析 对于树上一个点操作后对相邻节点产生影响的题目,DP 状态的定义需要考虑父节点的影响. 定义 DP 状态 dp[u][0/1] ...

  4. HDU 1561 The more, The Better

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

  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 1561] The more, The Better

    题意: 给你n个物品,给出\(a_i\),\(b_i\),分表代表选择第i个物品前必须先选择第\(a_i\)个物品和选择第i个物品后获得的收益,你可以选择m个物品,求收益最大值. 题解: 首先这题很像 ...

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

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

  8. 动态规划 —— 背包问题 P07 —— 有依赖背包

    [简化的问题] 这种背包问题的物品间存在某种"依赖"的关系,也就是说,i依赖于j,表示若选物品i,则必须选物品j. 为了简化起见,我们先设没有某个物品既依赖于别的物品,又被别的物品 ...

  9. Gym - 100502G Outing (强连通缩点+树形依赖背包)

    题目链接 问题:有n个人,最多选k个,如果选了某个人就必须选他指定的另一个人,问最多能选多少个人. 将每个人所指定的人向他连一条单向边,则每一个点都有唯一的前驱,形成的图是个基环树森林,在同一个强连通 ...

最新文章

  1. Linux KVM虚拟网络的桥接
  2. 【android】如何让WebView对Video标签的支持更强力
  3. RTMP Handshake
  4. js中,实现对键盘按键的监听:
  5. Linux进阶之路————Linux运行级别(重置密码)
  6. windows封装/备份恢复/双系统安装
  7. android 蓝牙与单片机通信原理图,单片机结合蓝牙模块串口通信
  8. python识别图片、PDF识别成文字、表格(包含去除水印) 代码不是最新,可在最下面Gitee地址查看最新代码
  9. iptables四表五链及基本使用
  10. 计算机应用程序通过文件打不开,应用程序打不开|exe文件关联修复器|打开方式还原 - 所有应用程序文件打不开的解决方法 - 安全专题...
  11. laravel 分页 + 分页的样式
  12. 南通大学关于 2022 年下半年成人学士学位英语考试的通知
  13. EMCC Vmware 安装82%出错
  14. 企业如何通过企业微信玩转社群营销?
  15. Rescue-Prime hash STARK
  16. Cesium 中的离屏渲染
  17. 在一台服务器安装多个MySQL数据库实例
  18. 热水器密封测试,GripSeal格雷希尔快速接头有什么解决方案?G60-085T
  19. 移动互联网时代,浅谈旅行社的转型升级
  20. 共享单车的电子围栏——基于RTK技术的高精度定位

热门文章

  1. 3.7.5 - Modifying Strings
  2. Java判断100到200之间所有的素数,并且输出这些素数
  3. Unet车牌分割,矫正
  4. 金融文本信息情感分析(负面及主体判定)
  5. 图像风格转换 - keras简化版实现
  6. 百度推广怎么样做才可以有效果呢?
  7. 光照强度曲线图android,有关光合作用的曲线图的分析(一) - xyz的日志 - 网易博客...
  8. api es7 删除所有数据_Elasticsearch7.1中文文档-第四章-API约定
  9. python动态爱心代码_python 动态绘制爱心的示例
  10. Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)...