POJ 2342 树形DP入门题】的更多相关文章

有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是多少. 树形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://poj.org/problem?id=2342 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> using namespace std; inline int read(){ ,x=; char ch=getchar(); '){ if(ch=='-') x…
题意: 有个公司要举行一场晚会.为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请.已知每个人最多有唯一的一个上司. 已知公司的每个人参加晚会都能为晚会增添一些气氛,求一个邀请方案,使气氛值的和最大. 思路: 树形DP入门题 ①先设定:数组dp[i][0]为第i个人参加了舞会的时候这个子树的欢乐值之和                   数组dp[i][1]为第i个人没参加舞会的时…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直接上司将不嫩参加,问最大的快乐值为多少 题解:入门的树形DP题,dp[i][0]表示第i个人不去,dp[i][1]表示第i个人去. #include<cstdio> #define FFC(i,a,b) for(int i=a;i<=b;i++) #define max(a,b) ((a)&…
写了两种DP,第一种是按照自己习惯来xjb敲的,第二种参考别人 熟悉一下树形DP的套路 dp[i][]是维护i及以下的关系最优值的,所以我觉得两次DP记忆搜索之间不清-1应该是正确的(也就做了一次加法) #include<bits/stdc++.h> #define rep(i,j,k) for(register int i=j;i<=k;i++) #define rrep(i,j,k) for(register int i=j;i>=k;i--) using namespace…
题目链接: http://poj.org/problem?id=2342 题目大意:直属上司和下属出席聚会.下属的上司出现了,下属就不能参加,反之下属参加.注意上司只是指直属的上司.每个人出席的人都有一个快乐值,问最大的快乐值是多少. 解题思路: 首先确定一下顶头上司是谁. f[v]=u表示u是v的父亲,这样addedge完了之后,从1开始while(f[root]) root=f[root],最后root就是顶头上司,也就是dfs的起点了. 用dp[i][0]表示对于第i个人不出席的最大快乐值…
第一道自己做出来的区间dp题,兴奋ing,虽然说这题并不难. 从后向前考虑: 状态转移方程:dp[i][j]=dp[i+1][j](i<=j<len); dp[i][j]=Max(dp[i][j],dp[i+1][k-1]+dp[k+1][j]+1),(a[i]==a[j]&&i<len,j<len,k<len); #include<stdio.h> #include<string.h> #define N 300 int dp[N][…
Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5767   Accepted: 3335 Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure…
树形DP.这是个什么东西?为什么叫这个名字?跟其他DP有什么区别? 相信很多初学者在刚刚接触一种新思想的时候都会有这种问题. 没错,树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上. 既然说了这是一种思想,那么单讲的话,也讲不出什么东西来.所以我们结合具体题目进行讲解,希望大家可以在题目中领悟这种思想. 提到树形DP入门题,很多人都会提到没有上司的舞会这道题,的确,这道题堪称树形DP的典范,但是我个人认为,这道题的处理方式不够普遍,二叉苹果树这道题的处理方式相比之下更加普遍.下面我…
题意:选出不含直接上下司关系的最大价值. 解题关键:树形dp入门题,注意怎么找出根节点,运用了并查集的思想. 转移方程:dp[i][1]+=dp[j][0];/i是j的子树 dp[i][0]+=max(dp[j][0],dp[j][1]); #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<…