poj2342 Anniversary party (树形dp)
poj2342 Anniversary party (树形dp)
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9128 | Accepted: 5250 |
Description
Input
L K
It means that the K-th employee is an immediate supervisor of the L-th employee. Input is ended with the line
0 0
Output
Sample Input
- 7
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1 3
- 2 3
- 6 4
- 7 4
- 4 5
- 3 5
- 0 0
Sample Output
- 5
Source
大致题意:
某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大。
思路:
思路:
任何一个点的取舍可以看作一种决策,那么状态就是在某个点取的时候或者不取的时候,以他为根的子树能有的最大活跃总值。分别可以用f[i,1]和f[i,0]表示第i个人来和不来。
上司来,下属不来
当i来的时候,dp[i][1] += dp[j][0];//j为i的下属
上司不来,下属来或不来
当i不来的时候,dp[i][0] +=max(dp[j][1],dp[j][0]);//j为i的下属
- #include<iostream>
- #include<cmath>
- #include<algorithm>
- #include<vector>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<string>
- using namespace std;
- #define maxn 6005
- int n;
- int dp[maxn][],father[maxn];//dp[i][0]0表示不去,dp[i][1]1表示去了
- bool visited[maxn];
- void tree_dp(int node)
- {
- int i;
- visited[node] = ;
- for(i=; i<=n; i++) //找1到n中找node节点的下属
- {
- if(!visited[i]&&father[i] == node)//i为下属
- {
- tree_dp(i);//递归调用孩子结点,从叶子结点开始dp
- //关键
- dp[node][] += dp[i][];//上司来,下属不来
- dp[node][] +=max(dp[i][],dp[i][]);//上司不来,下属来、不来
- }
- }
- }
- int main()
- {
- int i;
- int f,c,root;
- while(scanf("%d",&n)!=EOF)
- {
- memset(dp,,sizeof(dp));
- memset(father,,sizeof(father));
- memset(visited,,sizeof(visited));
- for(i=; i<=n; i++)
- {
- scanf("%d",&dp[i][]);
- }
- root = ;//记录父结点
- bool beg = ;
- while (scanf("%d %d",&c,&f),c||f)
- {
- //c的老爸是f
- father[c] = f;
- //儿子是跟节点 或者这条边是第一条边
- //父亲做根节点
- if( root == c || beg )
- {
- root = f;
- }
- }
- //循环寻找根节点
- while(father[root])//查找父结点
- root=father[root];
- //从根节点开始树形dp
- tree_dp(root);
- //取最大的上司去或者不去中的大值
- int imax=max(dp[root][],dp[root][]);
- printf("%d\n",imax);
- }
- return ;
- }
poj2342 Anniversary party (树形dp)的更多相关文章
- [poj2342]Anniversary party_树形dp
Anniversary party poj-2342 题目大意:没有上司的舞会原题. 注释:n<=6000,-127<=val<=128. 想法:其实就是最大点独立集.我们介绍树形d ...
- [poj2342]Anniversary party树形dp入门
题意:选出不含直接上下司关系的最大价值. 解题关键:树形dp入门题,注意怎么找出根节点,运用了并查集的思想. 转移方程:dp[i][1]+=dp[j][0];/i是j的子树 dp[i][0]+=max ...
- poj 2324 Anniversary party(树形DP)
/*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ...
- POJ 2342 - Anniversary party - [树形DP]
题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...
- hdu Anniversary party 树形DP,点带有值。求MAX
Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题
一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...
- HDU 1520 Anniversary party [树形DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题目大意:给出n个带权点,他们的关系可以构成一棵树,问从中选出若干个不相邻的点可能得到的最大值为 ...
- POJ Anniversary party 树形DP
/* 树形dp: 给一颗树,要求一组节点,节点之间没有父子关系,并且使得所有的节点的权值和最大 对于每一个节点,我们有两种状态 dp[i][0]表示不选择节点i,以节点i为根的子树所能形成的节点集所能 ...
- Anniversary party_树形DP
Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State Univer ...
- HDU1520 Anniversary party 树形DP基础
There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The Un ...
随机推荐
- Ajax应用查询员工信息
首先要用上一篇的步骤启动服务器,建立站点.然后在该站点下创建php文件和html文件. php代码如下,文件名为server.php <?php //设置页面内容是html编码格式是utf-8 ...
- 删除过期备份报错RMAN-06207 RMAN-06208解决方案
RMAN备份日志中出现了警告 日志文件目录如下: [root@erpdbs rmanback]# ll total 88 -rw-r--r-- 1 oraprod dba 81011 Sep 7 22 ...
- git 如何创建一个分支
参考: https://jingyan.baidu.com/article/adc81513b95a20f723bf73bf.html 首先进入本地git仓库目录下,打开git bash环境 使用gi ...
- .net 程序集加载,版本不匹配的解决方法
经常有些时候,A.dll引用的是Microsoft.EntityFrameworkCore.dll version=1.0.0.0 publicKeyToken="adb9793829dda ...
- Vue和JQuery相比,除了节省了开发成本,还有什么优点?
1.模块化,变量都是私有作用域,JQuery只能用全局变量.闭包,影响性能 2.组件化 3.因为1,所以方便维护 vuex 要注意刷新清空的问题 vue-router是局部刷新,window.loca ...
- windows上关闭Nagle算法
下面的设置可以调整或禁用 nagel 算法.禁用 nagel 算法以后, 允许很小的包没有延迟立即发送.建议对某些游戏关闭 nagel 算法, 这样做对文件传输/吞吐量有负面影响.默认状态( 开启na ...
- inet_XX族函数
在网络编程中, 经常会将网络字节转为本地字节或者将本地字节转为网络字节, 但是如果每次我们都是都通过htonl, ntohl函数需要将10进制转为整数, 甚至还用将字符串转为整数, 再转为网络字节, ...
- 比n大的最小不重复数
void Calculate(int a) { int pa = a; ; ] = {}; //将pa按位存储到数组b ) { b[count++] = pa%; pa = pa/; } bool f ...
- Shell 脚本编程 基本语法:
Shell 脚本编程语法: 注: 文章来源 http://www.cnblogs.com/yunquan/p/6821850.html 视频来源:https://www.bilibili.com/vi ...
- Whl自助搜索下载器
本文转载自以下链接:https://github.com/Light-City/AutoDownloadWhl 源码地址: https://github.com/Light-City/AutoDown ...