(树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520
题意:
有个公司要举行一场晚会。为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请。已知每个人最多有唯一的一个上司。
已知公司的每个人参加晚会都能为晚会增添一些气氛,求一个邀请方案,使气氛值的和最大。
思路:
树形DP入门题
①先设定:数组dp[i][0]为第i个人参加了舞会的时候这个子树的欢乐值之和
数组dp[i][1]为第i个人没参加舞会的时候这个子树的欢乐值之和
②由此我们可以推出对于i的状态转移方程为
dp[i][0] = a[i]+ ∑dp[j][1] (i为j的父亲节点)
dp[i][1] = ∑Max(dp[j][1],dp[j][0]) (i为j的父亲节点)
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=;
int a[maxn],dp[maxn][];
int n;
vector<int> edge[maxn];
void dfs(int x,int fa)
{
dp[x][]=a[x],dp[x][]=;
for(int i=;i<edge[x].size();i++){
if(edge[x][i]!=fa){
dfs(edge[x][i],x);
dp[x][]+=dp[edge[x][i]][];
dp[x][]+=max(dp[edge[x][i]][],dp[edge[x][i]][]);
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF){
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
int l,k;
for(int i=;i<=n;i++)
edge[i].clear();
memset(dp,,sizeof(dp));
while(scanf("%d%d",&l,&k)&&l&&k){
edge[l].push_back(k);
edge[k].push_back(l);
}
dfs(,);
printf("%d\n",max(dp[][],dp[][]));
}
return ;
}
(树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520的更多相关文章
- POJ 2342 树形DP入门题
有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...
- 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应该是正确的(也就做了一次加法 ...
- 【树形DP】洛谷P1352_没有上司的舞会
本人第一篇Blog,初学树形DP,心情别样鸡冻... 好了废话不多说,我们来看看题目[传送门] 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是 ...
- [poj2342]Anniversary party树形dp入门
题意:选出不含直接上下司关系的最大价值. 解题关键:树形dp入门题,注意怎么找出根节点,运用了并查集的思想. 转移方程:dp[i][1]+=dp[j][0];/i是j的子树 dp[i][0]+=max ...
- 树形DP入门详解+题目推荐
树形DP.这是个什么东西?为什么叫这个名字?跟其他DP有什么区别? 相信很多初学者在刚刚接触一种新思想的时候都会有这种问题. 没错,树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上. 既 ...
- P2016 战略游戏——树形DP大水题
P2016 战略游戏 树形DP 入门题吧(现在怎么是蓝色标签搞不懂): 注意是看见每一条边而不是每一个点(因为这里错了好几次): #include<cstdio> #include< ...
- 树形dp 入门
今天学了树形dp,发现树形dp就是入门难一些,于是好心的我便立志要发一篇树形dp入门的博客了. 树形dp的概念什么的,相信大家都已经明白,这里就不再多说.直接上例题. 一.常规树形DP P1352 没 ...
- poj 3254 状压dp入门题
1.poj 3254 Corn Fields 状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...
随机推荐
- the password has expired
Oracle提示错误消息ORA-28001: the password has expired,是由于Oracle11G的新特性所致, Oracle11G创建用户时缺省密码过期限制是180天(即6个月 ...
- Jmeter 发送json
阅读更多 使用jmeter发送json数据.方法有三种 原创,转载请注明出处 1.利用CSV Data set Config. 参考: http://demi-panda.com/2013/01/08 ...
- PHP性能监控
使用xhprof进行线上PHP性能追踪及分析 日志未经声明,均为AlloVince原创.版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可. 之前一直使用基于Xdebug进行PHP的性 ...
- Linux 内核使用 USB 数据函数
USB 核心中的几个帮忙函数可用来从所有的 USB 设备中存取标准信息. 这些函数不能从 中断上下文或者持有自旋锁时调用. 函数 usb_get_descriptor 获取指定的 USB 描述符从特定 ...
- 数据库java包
package com.hgkj.model.dao.impl; import java.sql.*; public class DBManager { private static final St ...
- C# dotnet 获取整个局域网的 ip 地址
局域网可以使用的 IP 地址有很多,我写了一段代码用来枚举所有可以用的 ip 地址 小伙伴都知道,局域网可以使用的 IP 范围如下 A类地址:10.0.0.0 - 10.255.255.255 B类地 ...
- ASP.NET Core 连接 GitLab 与 MatterMost 打造 devops 工具
在现代化开发工具链里面就包含了自动化的通讯工具,而日志写代码我是推到 Gitlab 平台上,我今天听了郭锐大佬的分享之后,感觉我现在的团队的自动化做的远远不够.我在他的课程上学到的最重要一句话就是做工 ...
- Rancher2.x部署K8s
1.安装Docker [root@localhost ~]# docker -v Docker version , build 774a1f4 2.使用Docker运行Rancher : stable ...
- SQL常见命令
SQLite常见命令:https://www.cnblogs.com/senior-engineer/p/7028972.html
- web服务器调用Servlet的过程
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: Web服务器首先检查是否已经装载并创建了该Servlet的实例对象.如果是,则直接执行第④步,否则,执行第② ...