poj 4045 (树形DP)】的更多相关文章

先选一点为根节点找出所有父节点i到下面所有点距离和dp[i],该父节点下面有多少个点Node[i]. 然后求出所有节点的所有非子节点到该点的距离dp1[v]+=(dp1[u]+(dp[u]-dp[v]-Node[v]-1)+n-Node[v]-1) dp[u]-dp[v]-Node[v]-1:u的子节点中除了v这一部分子节点到u的距离 n-Node[v]-1:非v的字节点的个数 #include<stdio.h> #include<string.h> #define N 50002…
Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同时花费为v[i].问最小花费. 以前做过一道类似的题(水库),这道题也差不多.首先来考虑,用\(best[i]\)表示以i为根的子树的最小花费.这样做有什么问题呢?它无法很好的处理消防站重复建的问题. 所以换一种做法.\(best[i]\)依然表示原来的含义,新建一个数组\(f[i][j]\),表示当i这个结…
题目链接:http://poj.org/problem?id=1463 思路:简单树形dp,如果不选父亲节点,则他的所有的儿子节点都必须选,如果选择了父亲节点,则儿子节点可选,可不选,取较小者. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> using namespace std; #define MAXN 22…
题目链接:http://poj.org/problem?id=2486 思路:经典的树形dp,想了好久的状态转移.dp[i][j][0]表示从i出发走了j步最后没有回到i,dp[i][j][1]表示从i出发走了j步最后回到i.于是我们把所有到情况归结为3种: 1.从u(v是其中一颗子树)出发,走了j步,最后停在了v,则有dp[u][j+1][0]=max(dp[u][j+1][0],dp[u][j-k][1]+dp[v][k][0]);(从u->v多走了1步). 2.从u出发,走了j步,最后停在…
题目链接:http://poj.org/problem?id=3140 思路:简单树形dp题,dp[u]表示以u为根的子树的人数和. #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<climits> #include<algorithm> #include<stack>…
Strategic game Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 7490   Accepted: 3483 Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad…
有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是多少. 树形DP入门题. DP部分: dp[i][0]表示职员i不来參加party,以i为根的子树的最大搞笑值, dp[i][1]表示职员i来參加party.以i为根的子树的最大搞笑值. 转移方程: dp[cur][1]+=dp[next][0]; dp[cur][0]+=Max(dp[next][…
题目连接:http://acm.hust.edu.cn/vjudge/problem/17665 参考资料:http://blog.csdn.net/woshi250hua/article/details/7684771 题目大意:xx大佬要竞选xx职位,现一共有n个国家,获得xx职位至少需要m个国家的支持,某个国家下面会有若干个附属国家,这个代表获得这个国家的支持就可以获得一群国家的支持.想要获得这个国家的支持,就必须拿钻石去贿赂,好厚黑.问获得xx职位最少需要多少钻石. 这道题有几个要点:…
题意:电视台发送信号给很多用户,每个用户有愿意出的钱,电视台经过的路线都有一定费用,求电视台不损失的情况下最多给多少用户发送信号. 转自:http://www.cnblogs.com/andre0506/archive/2012/10/09/2717441.html 思路: 基础树形DP. x表示当前在的节点.j表示选j个收听电视. f[x][j]=max(f[x][j],f[x.son][k]+f[x][j-k]-w[i]); // by SiriusRen #include <cstdio>…
这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算. 树形DP f[x][0]+=max(f[x.son][0],f[x.son][1]); f[x][1]+=f[x.son][0]; f[x][0]表示不选这个节点,f[x][1]表示选这个节点. 如果选了这个节点,那么它的儿子必定不选. 如果不选这个节点,它的儿子们可选可不选 取最大的即可. 然…