G将军的敢死队——树状DP】的更多相关文章

当前节点的两种情况: 1.beChoosed = {son.beAbandoned乘积} //当前节点选中的情况下,子节点都不能选 2.beAbandoned = {(son.beAbandoned + son.beChoosed)乘积} //当前节点不选的情况下,子节点所有情况都算上 ps:最终要减去一种所有节点都未被选中的情况  -1 #include <iostream> #include <stdio.h> #include <list> #define MOD…
这个题的数据真的很毒瘤,身为一个交了8遍的蒟蒻的呐喊(嘤嘤嘤) 个人认为作为一个树状DP的入门题十分合适,同时建议做完这个题之后再去做一下这个题 选课 同时在这里挂一个选取节点型树形DP的状态转移方程: ;i<a[rt].size();i++) { int j=a[rt][i]; dp(j); f[rt][]+=max(f[j][],f[j][]); f[rt][]+=f[j][]; } (PS. j 为 i 的孩子) f[i][0]表示不选i f[i][1]表示选i 使用一个vector来表明…
题目:Anniversary party 题意:给出N各节点的快乐指数,以及父子关系,求最大快乐指数和(没人职员愿意跟直接上司一起玩): 思路:从底向上的树状DP: 第一种情况:第i个员工不参与,F[i][0] += max(F[k][1], F[k][0]);(k为i的儿子) 第二种情况:第i个员工参与,F[i][1] += F[k][0]; F[i][j]表示第i个员工是否参与: 边界:F[i][0] = 0:F[i][1] = 其快乐指数: #include <iostream> #in…
Cell Phone Network Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6273   Accepted: 2250 Description Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires hi…
题目链接 题意:给你一棵树,各个节点都有价值(除根节点),从根节点出发,选择m个节点,问最多的价值是多小. 思路:很明显是树状dp,遍历树时背包最优价值,dp[i][k]=max{dp[i][r]+dp[son[i]][k-r]} #include <iostream> #include<cstdio> #include<cstring> using namespace std; #define MAXN 250 struct node{ int from,to,nex…
题意:Ural大学有n个职员,1~N编号,他们有从属关系,就是说他们关系就像一棵树,父节点就是子节点的直接上司,每个职员有一个快乐指数,现在要开会,职员和职员的直接上司不能同时开会,问怎才能使开会的快乐指数最高. 思路:用树状dp,dp[i][0]为不参加会议,dp[i][1]为参加会议 #include<iostream> #include<cstdio> #include<vector> #define N 6010 using namespace std; vec…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是他的上司不在场的情况.求派对happy值的和最大能是多少. PS:这是多组输入,一开始还没看出来... dp[i][0]代表第i个职员不来的情况下的快乐值,dp[i][1]是第i个职员来的情况下的快乐值 那很显然有 dp[上司][来] += dp[下属][不来];dp[上司][不来] += Max(…
Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 unit of cost respectively. The nodes are labeled from 1 to N. Your job is to transform the tree to a cycle(without superfluous edges) using minimal c…
Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7789   Accepted: 2606 Description 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 amoun…
题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置.下面是一颗有4个树枝的树 2 5 \ / 3 4 \ / 1 现在这颗树枝条太多了,需要剪枝.但是一些树枝上长有苹果. 给定需要保留的树枝数量,求出最多能留住多少苹果. 输入输出格式 输入格式: 第1行2个数,N和Q(1<=Q<= N,1<N<=100). N表示树…
题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明就向老师提出了这个问题: 一株奇怪的花卉,上面共连有N 朵花,共有N-1条枝干将花儿连在一起,并且未修剪时每朵花都不是孤立的.每朵花都有一个“美丽指数”,该数越大说明这朵花越漂亮,也有“美丽指数”为负 数的,说明这朵花看着都让人恶心.所谓“修剪”,意为:去掉其中的一条枝条,这样一株花就成了两株,扔掉…
题目描述 你要组织一个由你公司的人参加的聚会.你希望聚会非常愉快,尽可能多地找些有趣的热闹.但是劝你不要同时邀请某个人和他的上司,因为这可能带来争吵.给定N个人(姓名,他幽默的系数,以及他上司的名字),编程找到能使幽默系数和最大的若干个人. 输入输出格式 输入格式: 第一行一个整数N(N<100).接下来有N行,每一行描述一个人的信息,信息之间用空格隔开.姓名是长度不超过20的字符串,幽默系数是在0到100之间的整数. 输出格式: 所邀请的人最大的幽默系数和. 输入输出样例 输入样例#1: 5…
这两道题是学长精心准备的,想了很长时间,比较经典. 第一题 树上染色 有一棵点数为 N的树,树边有边权.给你一个在 0∼N之内的正整数 K,你要在这棵树中选择 K 个点,将其染成黑色,并将其他的 N−K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的和的收益. 问收益最大值是多少. 这一题一开始没思路主要是卡在了在从下向上转移中,如何将每个儿子的贡献值的算上 后来怂了题解QAQ 这题是树状背包问题 主要难点在于如何将每条边数加上, 设当前的节点为x而儿子节点为to…
紫皮,各种,非原创 树状数组在我的理解就是在决策过程中具有层次关系,像是树一样,具有上下级关系或者上级对上级一定程度的限制条件 uva 12186 工人的请愿书 下属中不小于 T% 的人签字时会签字递给上级,问至少需要多少人签字才能传给老板 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include…
树状动态规划定义 之所以这样命名树规,是因为树形DP的这一特殊性:没有环,dfs是不会重复,而且具有明显而又严格的层数关系.利用这一特性,我们可以很清晰地根据题目写出一个在树(型结构)上的记忆化搜索的程序.而深搜的特点,就是"不撞南墙不回头".这一点在之后的文章中会详细的介绍. 首先是扫盲,介绍几条名词的专业解释以显示我的高端(大部分人可以略过,因为学习到树规的人一下应该都懂--): 动态规划:  问题可以分解成若干相互联系的阶段,在每一个阶段都要做出决策,全部过程的决策是一个决策序列…
生命之树 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上, 都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S, 使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, ..., vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连. 在这个前提下,上帝要使得S中的点所对应的整数的和尽量大. 这个最大的和就是上帝给生命之树的评分. 经过atm的努力,他已经知道了上帝给每棵树上每个节点上的整数…
B - 树形dp Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the sol…
Tree chain problem Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 262    Accepted Submission(s): 59 Problem Description Coco has a tree, whose vertices are conveniently labeled by 1,2,-,n. The…
这个题真是...看了一会之后,发现有一丝丝的熟悉,再仔细看了看,R,这不是那个将军令么...然后果断调出来那个题,还真是,而且貌似还是简化版的...于是就直接改了改建树和输入输出直接交了..阿勒,就20分..真是不给面子,于是就继续简化了代码...然后又交,变0分了.发现建树的时候双向边里面放了顺序一样的字母..再改过来,A了,然而树形DP做法还未可知..或许蒟蒻我就只能贪心吧.. #include<iostream> #include<cstdio> #include<cm…
http://poj.org/problem?id=2342 第一道树状dp,入门题,用vector构建有向图. #include<iostream> #include<cstring> #include<cstdio> #include<vector> using namespace std; ],last[],dp[][]; vector<]; vector<int>::iterator it; void dfs(int now) {…
一.题意 首先是对题目的翻译.给出一个长长的字符串,这个字符串描述了一个吊灯.对于给字符串只有两种操作数——'a'为一个吊灯灯珠,将改灯珠入栈,一位阿拉伯数字K,代表一个环,将把该数字前面k位数都出栈并且穿成一个环,并将该环重新入栈(作为一个单元).由此可以得到一颗神奇的树——每个节点的若干子节点呈现循环数组的关系.因而此处有对于同构的定义为:再该环上各个小串的相对位置不变.于是,要求一个新的字符串,能够成上述字符转的一个同构的树,在这个基础上求出最小的“最大栈空间”大小. 二.思路 首先设dp…
题意:给一棵n个结点的无根树染色,求使每个结点距离为k的范围内至少有一个被染色的结点的总染色方法数目 分析:首先我们定义: 对于结点v, 如果存在一个黑色结点u距离v不超过k,则结点v被“控制” 首先将无根树转换成以1为根的有根树,设dp[v][i]为对于以v为根的子树,距离v最近的黑色结点深度为i时, 该子树中结点全部被控制或者可能在其他子树的影响下被全部控制的染色方法数. 下面来解释一下, 我们知道,当两个黑色结点距离不超过2*k+1时,其间的所有节点都被控制.那么当 i <= k 时,子树…
#include<stdio.h> #include<string.h> #include <iostream> using namespace std; ; int dp[N][N],vis[N],head[N],num,m; struct edge { int st,ed,w,next; }e[N*]; void addedge(int x,int y,int w) { e[num].st=x;e[num].ed=y;e[num].w=w;e[num].next=h…
题目链接 题意:给你一棵树(必须从根节点出发),每个节点上都有bug和value,你有m个骑士,每个骑士能消灭20个bug,你必须消灭该节点的全部bug才能拿到该节点的value,问最多能拿到value是多少. 思路:典型的背包dp ,  dp[n][m]=max(dp[n][m-x]+value,dp[n][m]) #include<iostream> #include<cstdio> using namespace std; #define N 110 #define INF…
一棵树上有K个黑色节点,剩余节点都为白色,将其划分成K个子树,使得每棵树上都仅仅有1个黑色节点,共同拥有多少种划分方案. 个人感觉这题比較难. 如果dp(i,0..1)代表的是以i为根节点的子树种有0..1个黑色节点的划分方案数. 当节点i为白色时.对于它的每一个孩子的节点处理: 求dp(i, 0)时有: 1,将该节点与孩子节点相连,但要保证孩子节点所在的子树种没有黑色节点: 2,将该节点不与该孩子节点相连.则该孩子节点要保证所在子树种有黑色节点: 即dp(i, 0) = π(dp(j,0 )…
Strategic game Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 5498   Accepted: 2484 Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad…
对于每个点,处理出走完其子树所需要的时间和其子树完全下载完软件的时间 易证,对于每个点的所有子节点,一定优先选择差值大的来给后面的时间 树规+贪心. #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<queue> #define N 500005 using namespace std;…
蒟蒻弱弱的开始做树形DP了,虽然做了这道题还是有很多不懂得地方. 这道题大意就是有一棵树,只保留其中q条边,求出剩余边的最大权值. 然后开始考虑怎么做(其实是看着题解出思路....),很容易可以想出DP数组应该代表什么含义.用f[i][j]表示第i个子节点保留下面j-1条边能达到的最大苹果数量. 为什么是j-1?因为如果选了i,那么就必须选上它上面那条来保证能够连到根上. 然后转移方程就有些想不到,题解是这样的:f[from][j]=max(f[from][j],f[v][k]+f[from][…
题目:一棵树,每个结点上都有一些苹果,且相邻两个结点间的距离为1.一个人从根节点(编号为1)开始走,一共可以走k步,问最多可以吃多少苹果. 思路:这里给出数组的定义: dp[0][x][j] 为从结点x开始走,一共走j步,且j步之后又回到x点时最多能吃到的苹果数. dp[1][x][j] 为从结点x开始走,一共走j步最多能吃到的苹果数(不必再回到x点).之所以要定义上面的一种状态是因为在求第二种状态时需要用到. 下面介绍递推公式. 对于结点x,假设它目前要访问的孩子为y,则1...(y-1)已经…
题意:一只蜗牛将壳忘在了一棵树的某一个末结点(叶子)上.它想找回自己的壳,但忘记是丢在哪个结点上了,只好从树根开始网上爬,一个结点一个结点地找.在一些结点上居住着毛毛虫,它们会告诉蜗牛该结点以及它的子树上是否有它的壳,这样可以节省些时间.两个结点如果相连,则距离为1.问蜗牛找到壳的最小期望距离为多少. 接着给了一个例子(上图): 假如蜗牛以结点2,4,5的顺序找,则壳分别在结点2,4,5时它需要爬行的距离为1,4,6.则它找到壳的期望为(1 + 4 + 6) / 3 = 11/3. 考虑另一种情…