【POJ - 2486】Apple Tree (树形背包,dp)

题干:

Wshxzt is a lovely girl. She likes apple very much. One day HX takes her to an apple tree. There are N nodes in the tree. Each node has an amount of apples. Wshxzt starts her happy trip at one node. She can eat up all the apples in the nodes she reaches. HX is a kind guy. He knows that eating too many can make the lovely girl become fat. So he doesn’t allow Wshxzt to go more than K steps in the tree. It costs one step when she goes from one node to another adjacent node. Wshxzt likes apple very much. So she wants to eat as many as she can. Can you tell how many apples she can eat in at most K steps.

Input

There are several test cases in the input 
Each test case contains three parts. 
The first part is two numbers N K, whose meanings we have talked about just now. We denote the nodes by 1 2 ... N. Since it is a tree, each node can reach any other in only one route. (1<=N<=100, 0<=K<=200) 
The second part contains N integers (All integers are nonnegative and not bigger than 1000). The ith number is the amount of apples in Node i. 
The third part contains N-1 line. There are two numbers A,B in each line, meaning that Node A and Node B are adjacent. 
Input will be ended by the end of file. 

Note: Wshxzt starts at Node 1.

Output

For each test case, output the maximal numbers of apples Wshxzt can eat at a line.

Sample Input

2 1 
0 11
1 2
3 2
0 1 2
1 2
1 3

Sample Output

11
2

题目大意:

一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走k步,最多能遍历到的权值。

多组数据 
第一行两个整数N,K 1<=N<=100,0<=k<=200 
第二行N个整数,0<=x<=1000表示每个节点中苹果的数量 
最后N-1行描述两个点相连

解题报告:

每次先对子节点做一遍01背包

dp[i][j]表示在i节点走j步可以得到的最大权值,因为可以发现,答案的数目只跟走的步数有关,而跟这些步数是怎么走的无关,所以设置状态为此。

这里注意的就是有时要走回头路

那么dp[i][j]要加一维,回到根节点或不回到跟节点,加上这个状态是为了方便后去走到其他的儿子节点。

0不回来1回来的话

dp[rt][j][0]=max(dp[rt][j][0],dp[rt][j-k][1]+dp[v][k-1][0]);

不回来的状态 为    其他节点回来并且当前节点不回来

dp[rt][j][0]=max(dp[rt][j][0],dp[rt][j-k][0]+dp[v][k-2][1]);

不回来的状态 为    其他节点不回来 当前节点回来

dp[rt][j][1]=max(dp[rt][j][1],dp[rt][j-k][1]+dp[v][k-2][1]);

回来的状态 为    其他节点都要回来,并且当前儿子也要回来。

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 = 205 + 5;
vector<int> vv[MAX];
int n,m;
int dp[MAX][MAX][2],a[MAX]; 
void dfs(int cur,int rt) {int up = vv[cur].size();for(int i = 0; i<=m; i++) dp[cur][i][0] = dp[cur][i][1] = a[cur];for(int i = 0; i<up; i++) {int v = vv[cur][i];if(v == rt) continue;dfs(v,cur);for(int j=m; j>=1; j--) {for(int k=1; k<=j; k++) {dp[cur][j][0]=max(dp[cur][j][0],dp[cur][j-k][1]+dp[v][k-1][0]);dp[cur][j][0]=max(dp[cur][j][0],dp[cur][j-k][0]+dp[v][k-2][1]);dp[cur][j][1]=max(dp[cur][j][1],dp[cur][j-k][1]+dp[v][k-2][1]);}}}
}
int main()
{while(~scanf("%d%d",&n,&m)) {for(int i = 1; i<=n; i++) scanf("%d",a+i),vv[i].clear();memset(dp,0,sizeof dp);for(int a,b,i = 1; i<=n-1; i++) {scanf("%d%d",&a,&b);vv[a].pb(b);vv[b].pb(a);}dfs(1,-1);printf("%d\n",max(dp[1][m][0],dp[1][m][1]));}return 0 ;
}

 

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

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

相关文章

mysql 磁盘组_有效管理 ASM 磁盘组空间

ORA-15041: diskgroup space exhausted 对您的数据库环境的直接和间接影响&#xff1f;与 ASM 磁盘组相关的磁盘空间问题和 ORA-15041 错误会ORA-15041: diskgroup space exhausted 对您的数据库环境的直接和间接影响&#xff1f;与 ASM 磁盘组相关的磁盘空间问题和 ORA-15041 …

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

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

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;并且检…