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

题干:

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

解题报告:

   建图很方便,用零号顶点代表一个权值为0的城堡。然后跑的时候从零号顶点开始跑m+1个城堡就好了。比较容易可以看出来,这个问题是可以优化空间和时间复杂度的。但是因为不卡内存所以不需要做过多处理。(实际上,空间只用到了孩子和父亲两个的关系,所以可以01滚动数组优化掉一维,对于空间,因为是求最大值问题,可以用线段树来优化第二维枚举。)

这题属于依赖背包,其实是三维的状态。

这里主要是想说一下和01背包的区别,之所以01背包是N^2级别的复杂度,这个是N^3,就是因为对于每一个根节点更新状态的时候,孩子节点不唯一,换句话说,01背包中,一个物品就代表选和不选两个决策,他就只有一个物品;但是放到树中,这一个孩子节点代表的是一棵子树,所以要枚举这子树中选了多少没选多少来更新状态, 所以多了一个量级的复杂度。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 200 + 5;
vector<int> vv[MAX];
int val[MAX];
int n,m;
int dp[MAX][MAX];
void dfs(int cur) {dp[cur][1] = val[cur];int up = vv[cur].size();for(int i = 0; i<up; i++) {int v = vv[cur][i];dfs(v);for(int j = m+1; j>=1; j--) {//j到2也可以ACfor(int k = 1; k<j; k++) {dp[cur][j] = max(dp[cur][j],dp[cur][j-k] + dp[v][k]);}}}
}
int main()
{while(~scanf("%d%d",&n,&m) && n && m) {for(int i = 0; i<=n; i++) vv[i].clear();memset(dp,0,sizeof dp);for(int pre,i = 1; i<=n; i++) {scanf("%d%d",&pre,val+i);vv[pre].pb(i);}dfs(0);printf("%d\n",dp[0][m+1]);}return 0 ;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql判断域为空_MySQL EXPLAIN 字段说明

id查询或关联查询的顺序。如果没有子查询且只有一个查询&#xff0c;则为一个常数 1&#xff0c;表示第一步&#xff1b;如果有子查询&#xff0c;则子查询为 1&#xff0c;父查询为 2&#xff1b;相同的 id 查询顺序为自上而下&#xff1b;如果有子查询&#xff0c;不同 id 值…

【CodeForces - 618A】Slime Combining(二进制,思维)

题干&#xff1a; Your friend recently gave you some slimes for your birthday. You have n slimes all initially with value 1. You are going to play a game with these slimes. Initially, you put a single slime by itself in a row. Then, you will add the other…

mysql索引技术_MySQL索引类型

首先请查看不同引擎支持的索引类型&#xff1a;存储引擎简介 。聚集索引和非聚集索引概念见&#xff1a;聚集索引与非聚集索引 和 聚集索引 。 覆盖索引见&#xff1a;覆盖索引 。1. InnoDB的每一个表都会有一个聚集索引(第一索引&#xff0c;主键索引)。InnoDB按照主键进行聚集…

【CodeForces - 616C 】The Labyrinth点石成金(并查集,dfs)

题干&#xff1a; 小O无意间发现了一张藏宝图&#xff0c;它跟随藏宝图的指引来到了一个宫殿&#xff0c;宫殿的地板被分成了n*m块格子&#xff0c;每个格子上放置了金子或者石头 藏宝图告诉小O&#xff0c;它可以选择一块石头变成金子&#xff0c;并且带走与变化后的金子联通…

mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...

Left Join / Right Join /inner join相关关于左连接和右连接总结性的一句话&#xff1a;左连接where只影向右表&#xff0c;右连接where只影响左表。Left Joinselect * from tbl1 Left Join tbl2 where tbl1.ID tbl2.ID左连接后的检索结果是显示tbl1的所有数据和tbl2中满足whe…

【蓝桥杯官网试题 - 真题训练】生命之树(树形dp)

题干&#xff1a; 在X森林里&#xff0c;上帝创建了生命之树。 他给每棵树的每个节点&#xff08;叶子也称为一个节点&#xff09;上&#xff0c;都标了一个整数&#xff0c;代表这个点的和谐值。 上帝要在这棵树内选出一个非空节点集S&#xff0c;使得对于S中的任意两个点a,…

jsp mysql 推荐算法_基于jsp+mysql+Spring+mybatis的SSM协同过滤音乐推荐管理系统(个性化推荐)...

运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。IDE环境&#xff1a; Eclipse,Myeclipse,IDEA都可以tomcat环境&#xff1a; 最好是Tomcat 7.x,8.x,9.x版本均可&#xff0c;理论上Tomcat版本不是太老都可以。&#xff0c;我们在这个环…

【牛客 - 157F】三轮(dp,分治fft)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/157/F 来源&#xff1a;牛客网 小k有一个三轮&#xff0c;它最多可以装105大小的东西 小k有n种商品&#xff0c;他要准备出摊了 每种商品体积为vi&#xff0c;都有105件 输出凑成1~m的体积的总方案…

项目进度计划甘特图_甘特图做项目进度计划的技巧?

原标题&#xff1a;甘特图做项目进度计划的技巧&#xff1f;甘特图怎么做项目进度计划&#xff1f;首先我们先了解一下&#xff0c;什么是甘特图。甘特图(Gantt chart)又称为横道图、条状图(Bar chart)&#xff0c;是由提出者亨利L甘特来命名的。甘特图通过条状图来显示项目&am…

【牛客 - 157C】PH试纸(前缀和,或权值线段树,主席树)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/157/C 来源&#xff1a;牛客网 题目描述 PH试纸&#xff0c;是一种检测酸碱度的试纸&#xff0c;试纸红色为酸性&#xff0c;蓝色为碱性。 HtBest有一个PH试纸&#xff0c;试纸被分成了n段&#xff0c…

python访问网页速度_python实现用于测试网站访问速率的方法

这是python编写的用于测试网站访问速率的代码片段&#xff0c;可以输出打开某url的时间&#xff0c;访问100次的平均时间&#xff0c;最大时间和最小时间等等import urllib2from datetime import *import timedef Process(url,n):minSpan 10.0maxSpan 0.0sumSpan 0.0over1s …

【牛客 - 157B】凤凰(树上并查集,dfs)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/157/B 来源&#xff1a;牛客网 题目描述 传说&#xff0c;凤凰是百鸟之王。有一天&#xff0c;凤凰要召开百鸟大会&#xff0c;百鸟国是一个由n个节点组成的树&#xff0c;每个节点有一只鸟&#xff0…

saltstack 管理mysql_saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入...

saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入salt的返回值写入mysql数据库&#xff1a;可参考&#xff1a;https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql在mysql数据库中创建数据库、…

【PTA天梯赛CCCC -2017决赛L1-6 】整除光棍 (20 分)(大数模拟除法)

题干&#xff1a; 这里所谓的“光棍”&#xff0c;并不是指单身汪啦~ 说的是全部由1组成的数字&#xff0c;比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如&#xff0c;111111就可以被13整除。 现在&#xff0c;你的程序要读入一个整数x&#…

mysql etl工具有哪些_常见ETL工具一览,你知多少?

这些年&#xff0c;几乎都与ETL打交道&#xff0c;接触过多种ETL工具。现将这些工具做个整理&#xff0c;与大家分享。一 ETL工具【国外】1. datastage点评&#xff1a;最专业的ETL工具&#xff0c;价格不菲&#xff0c;使用难度一般下载地址&#xff1a;ftp://ftp.seu.edu.cn/…

【PTA天梯赛CCCC -2017决赛L2-3】图着色问题 (25 分)(图染色)

题干&#xff1a; L2-3 图着色问题 &#xff08;25 分) 图着色问题是一个著名的NP完全问题。给定无向图G(V,E)&#xff0c;问可否用K种颜色为V中的每一个顶点分配一种颜色&#xff0c;使得不会有两个相邻顶点具有同一种颜色&#xff1f; 但本题并不是要你解决这个着色问题&a…

python如何显示时间_如何让python显示当前时间(东部)

如果您需要大量时区&#xff0c;则应使用pytz包&#xff0c;并且需要正确处理夏令时的重复小时(即从午夜到凌晨1点发生的情况)。对于简单的事情&#xff0c;创建自己的时区类很容易&#xff1a;import datetimeclass EST5EDT(datetime.tzinfo):def utcoffset(self, dt):return …

【PTA天梯赛CCCC -2017决赛L2-4】部落 (25 分)(图染色)

题干&#xff1a; 在一个社区里&#xff0c;每个人都有自己的小圈子&#xff0c;还可能同时属于很多不同的朋友圈。我们认为朋友的朋友都算在一个部落里&#xff0c;于是要请你统计一下&#xff0c;在一个给定社区中&#xff0c;到底有多少个互不相交的部落&#xff1f;并且检…

python控制浏览器导出数据_Django导出数据为Excel,调用浏览器下载

1. 环境Django (2.1.10) Python3.6 xlwt (1.3.0)操作系统使用的为&#xff1a;Windows 72. 接口代码defnow_export(request):data_list CIP.objects.all() #获取数据的查询集if notdata_list:return HttpResponse(json.dumps({"state": "1", "msg&q…

☆用Python实现ACM各大输入输出格式

arr input(""); #输入一个一维数组&#xff0c;每个数之间使空格隔开 num [int(n) for n in arr.split()]; #将输入每个数以空格键隔开做成数组 print(num[0]num[1]); #打印数组 # encoding: utf-8Python的输入是野生字符串&#xff0c;所以要自己转类…