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][1],dp[next][0]);
#include "stdio.h"
#include "string.h"
#include "vector"
using namespace std; struct node
{
int fa;
vector<int>child;
}data[6010];
int dp[6010][2],vis[6010];
int Max(int a,int b)
{
if (a<b) return b;else return a;
} void dfs(int cur)
{
int i,next;
vis[cur]=1;
for (i=0;i<data[cur].child.size();i++)
{
next=data[cur].child[i];
if (vis[next]==0)
dfs(next);
dp[cur][1]+=dp[next][0];
dp[cur][0]+=Max(dp[next][1],dp[next][0]);
}
}
int main()
{
int n,i,a,b;
while (scanf("%d",&n)!=EOF)
{
memset(dp,0,sizeof(dp));
memset(data,0,sizeof(data));
memset(vis,0,sizeof(vis)); for (i=1;i<=n;i++)
scanf("%d",&dp[i][1]); while(scanf("%d%d",&a,&b))
{
if (a+b==0) break;
data[a].fa=b;
data[b].child.push_back(a);
} for (i=1;i<=n;i++)
if (data[i].fa==0)
{
dfs(i);
break;
}
printf("%d\n",Max(dp[i][1],dp[i][0])); }
return 0;
}
POJ 2342 树形DP入门题的更多相关文章
- poj 2342树形dp板子题1
http://poj.org/problem?id=2342 #include<iostream> #include<cstdio> #include<cstring&g ...
- (树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520
题意: 有个公司要举行一场晚会.为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请. ...
- hdu_Anniversary party_(树形DP入门题)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直 ...
- HDU - 1520 树形DP入门题
写了两种DP,第一种是按照自己习惯来xjb敲的,第二种参考别人 熟悉一下树形DP的套路 dp[i][]是维护i及以下的关系最优值的,所以我觉得两次DP记忆搜索之间不清-1应该是正确的(也就做了一次加法 ...
- POJ 2342 (树形DP)
题目链接: http://poj.org/problem?id=2342 题目大意:直属上司和下属出席聚会.下属的上司出现了,下属就不能参加,反之下属参加.注意上司只是指直属的上司.每个人出席的人都有 ...
- poj 2955 区间dp入门题
第一道自己做出来的区间dp题,兴奋ing,虽然说这题并不难. 从后向前考虑: 状态转移方程:dp[i][j]=dp[i+1][j](i<=j<len); dp[i][j]=Max(dp[i ...
- Anniversary party(POJ 2342 树形DP)
Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5767 Accepted: 3335 ...
- 树形DP入门详解+题目推荐
树形DP.这是个什么东西?为什么叫这个名字?跟其他DP有什么区别? 相信很多初学者在刚刚接触一种新思想的时候都会有这种问题. 没错,树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上. 既 ...
- [poj2342]Anniversary party树形dp入门
题意:选出不含直接上下司关系的最大价值. 解题关键:树形dp入门题,注意怎么找出根节点,运用了并查集的思想. 转移方程:dp[i][1]+=dp[j][0];/i是j的子树 dp[i][0]+=max ...
随机推荐
- js数值转换
先来几个题吧: var num1 = Number("123blue");var num2 = Number("");var num3 = Number([]) ...
- Object.prototype.toString.call() 区分对象类型(判断对象类型)
在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种.对于数组. ...
- Unity3d 打包时报错 CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
今天打包带有Android插件的unity3d 项目是,报错CommandInvokationFailure: Unable to convert classes into dex format. S ...
- poj3085
#include <stdio.h> #include <stdlib.h> int main() { ; scanf("%d",&n); whil ...
- IOS-时间与字符串互相转换
有时会遇到这种问题,须要把时间和时间戳互相转换 比方把"这种格式 或者是把""转换成"2014-07-16 15:54:36" 首先来第一个: 当前时 ...
- 关于我和document.write那点不得不说的事
一直用document.write()方法向浏览器中显示数据用,把它当做Alert()使用, 看来这样用有些大材小用了,下面说说它的主要用处. document.write()方法可以用在两个方面: ...
- Serializable接口的背后
序列化是什么? 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得.序列化分为两大部分:序列化和反序列化. 序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网 ...
- JAVA 从GC日志分析堆内存 第七节
JAVA 从GC日志分析堆内存 第七节 在上一章中,我们只设置了整个堆的内存大小.但是我们知道,堆又分为了新生代,年老代.他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比 ...
- error1
#include<stdio.h>main(){ int a[10],i,m,n,j; for(i=3;i<10;i++) scanf("%d",&a ...
- MySql Error 2006
导入长字段时出现2006错误 在my.ini最后添加 max_allowed_packet = 10M 问题解决. max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度.