ACM:计划一个公司聚会nbsp;(大一时头疼…
计划一个公司聚会
问题描述:
Stewart教授是一家公司总裁的顾问,这家公司正在计划一个公司的聚会。这个公司有一个层次式的结构;也就是,管理关系形成一颗以总裁为根的树。人事部门按每个员工喜欢聚会的程度来排名,排名是一个实数。为了使每个参加聚会者都喜欢这个聚会,总裁不希望一个雇员和她的直接上司同时参加。
Stewart教授面对一颗描述公司结构的树,使用了左孩子右兄弟描述法。树中每个节点除了包含指针,还包含雇员的名字以及雇员喜欢聚会的排名。描述一个算法,它生成一张客人列表,使得客人喜欢聚会的程度的总和最大。分析你的算法的执行时间。
要求你算出最大的喜欢程度和。
Sample Input:
n: 员工个数, 接下一行输入每个员工对这次party的喜欢程度.
接下的n行内, 每行输入u:员工编号, num: 该员工下属的个数, vi: 该员工的第i个下属的编号(0<=i<n)
Sample Output:
输出最大的喜欢程度和.
Sample Input:
5
2 3 5 4 4
0 2 2 3
2 1 1
1 1 4
3 0
4 0
6
20 3 5 4 5 30
0 2 2 3
2 1 1
3 1 4
1 0
4 1 5
5 0
Sample Output:
13
53
题意: 上述中文描述
解题思路:
1. 每个员工可以设置2个状态state: 参加和不参加.
2. 动态规划求解, 设状态: dp[node][0]: node员工不参加party的及其下属的最大喜欢程度.
dp[node][1]: node员工参加party的及其下属的最大喜欢程度.
3. 状态转移方程:
dp[node][0] = ∑max(DP(i,0),DP(i,1)); (i是node的直接下属编号)
dp[node][1] = a[node]+∑DP(i,0); (a[node]: node员工对聚会的喜欢程度);
4. 最后结果是: result = max(DP(root,0) , DP(root,1));
因为root没有上司所以要分别求2次, 最后取较大值.
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define MAX 105
int n; //员工数量
bool g[MAX][MAX]; //保存员工树状关系
int a[MAX]; //对party的喜欢程度
int root; //无上司的人 (boss)
int dp[MAX][2]; //dp[i][0]: node不参加; dp[i][1]: 参加
inline int max(int a,int b)
{
return a > b ? a : b;
}
void read_graph()
{
int i, j;
memset(g,false,sizeof(g));
memset(dp,-1,sizeof(dp));
for(i = 0; i < n; ++i)
scanf("%d",&a[i]); //每个人对party的喜欢程度
int u, v;
int num;
for(i = 0; i < n; ++i)
{
scanf("%d %d",&u,&num); //每个人得编号和下属个数
for(j = 0; j < num; ++j)
{
scanf("%d",&v); //下属编号
g[u][v] = true;
}
}
root = 0;
}
int DP(int node, int state) //当前节点node, state: 是否参加party
{
if(dp[node][state] != -1) return dp[node][state];
int ans;
if(state == 0) //node不参加party
{
ans = 0;
for(int i = 0; i < n; ++i)
{
if(g[node][i])
ans += max(DP(i,0),DP(i,1));
}
dp[node][state] = ans;
return ans;
}
else //node参加party
{
ans = a[node];
for(int i = 0; i < n; ++i)
{
if(g[node][i])
ans += DP(i,0);
}
dp[node][state] = ans;
return ans;
}
}
int main()
{
freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF)
{
read_graph();
int result = DP(root,0); //分别算出root节点是否参加party
memset(dp,-1,sizeof(dp));
result = max(result, DP(root,1));
cout << result << endl;
}
return 0;
}
ACM:计划一个公司聚会nbsp;(大一时头疼…相关推荐
- ACM图灵奖获得者:想从大数据中获益,先解决集成问题!
文章讲的是ACM图灵奖获得者:想从大数据中获益,先解决集成问题!如今,大数据对所有行业都产生了深远影响:从医疗保健.汽车.电信到物联网.随着数据浪潮的持续,企业都在寻找更新的管理和分析方法.收集可行的 ...
- 中国哪些公司在做大数据
2019独角兽企业重金招聘Python工程师标准>>> "大数据"近几年来可谓蓬勃发展,它不仅是企业趋势,也是一个改变了人类生活的技术创新.大数据对行业用户的重要 ...
- 何为一个公司的护城河?
内容学习整理自 知识星球--产品学徒 1:一家企业最重要的竞争优势,不是今年赚了多少钱,而是明年能不能继续赚钱. 公司有没有自给自足的能力?自己是否有造血能力.有没有持续的稳定的健康的现金流.这就是这 ...
- 程序员初入公司:10大经验让你能力提升20倍!
IT企业普遍有个特点,"把女人当男人用,把男人当**(此处略去2个字)用." 有句俗话说,"男怕入错行",我想这句话其实也同样适用IT女生. 我们可以做个小测试 ...
- 程序员初入公司:10大经验让你能力提升20倍! 1
IT企业普遍有个特点,"把女人当男人用,把男人当**(此处略去2个字)用." 有句俗话说,"男怕入错行",我想这句话其实也同样适用IT女生. 我们可以做个小测试 ...
- 盛景网联:从培训公司到资本大鳄
盛景网联:从培训公司到资本大鳄(转) 文/孙骋 彭志强坐在沙发上,不言语的时候,看起来比实际年龄老成一些:头发从脑门向后梳,戴一副金丝眼镜.当他开口,谈吐里的学术气息,大概源于多年给企业主讲课的经历. ...
- “一个千古绝伦的大智者”莱布尼茨
►哥特弗里德·威廉·莱布尼茨(Gottfried Wilhelm Leibniz) 编者按: 莱布尼茨生于德国,成名于法国,因与牛顿的微积分"优先权之争"而与英国学术界纠葛--多才 ...
- Jonathan Bryce说:OpenStack属于全世界,并不属于一个公司,也不会属于一个国家……...
戳蓝字"CSDN云计算"关注我们哦! "openstack这个软件是属于全世界的,并不属于一个公司,也不会属于一个国家." 这是OpenStack基金会创始人兼 ...
- [转]把人当成一个公司来经营,心就不会那么累
本文转自:http://blog.sina.com.cn/s/blog_181b5b47e0102y0v2.html 为什么有的人笃定踏实,有的人风风火火,到头来有的人收获智慧和幸福,有的人终生跟自己 ...
最新文章
- vs2010类文件添加版权版本作者信息
- 内部排序——直接插入排序
- Mysql 获取当月和上个月第一天和最后一天的SQL
- python中xrange函数_python中xrange和range的区别
- case when then else多个条件_CentOS「linux」学习笔记24:if和case多个条件判断
- VTK:绘图之PieChartActor
- 【数据结构与算法】字符串匹配 KMP 算法
- mysql查询包含字符串(模糊查询)
- SqlDictionary表,使用SQL语句查询TableID
- 管理Kubernetes集群时需要关注的关键指标
- Atitit 提升开发效率几大策略 目录 1. 提升效率三原则	2 1.1. 更少的工作	2 1.2. 优化配置减少等待	2 1.3. 提升一次性处理能力	2 2. 方法提升	3 2.1. 分类优
- Windows系统服务原理
- Excel2013 破解(编辑工作表受保护)密码
- 用友u8服务器修改ipv4,用友U8-OA11.1 用友U8加密狗更换服务器了-用友U8
- 支付宝是怎么炼成的?蚂蚁金融级研发效能实践解析
- 写一个简单的登录页面!!!(html)
- Typora结合Git打造完美的个人云笔记本
- 《关于2010年计算机信息系统集成项目经理资质申报有关事项的通知》
- 如何让IE窗口打开时就自动默认为最大化
- csdn首篇笔记——关于笔记本身
热门文章
- python上传文件到onedrive_PyOne——另一款支持OneDrive目录浏览的程序
- think.class.php错误,thinkphp源码分析(四)—错误及异常处理篇
- Asterisk对接潮流的FXO网关GXW410x实现异地落地方法
- C++ Socket UDP范例
- Java项目:医疗药品采购系统(java+SSM+JSP+jQuery+h-ui+mysql)
- GetAsyncKeyState() 0x8000 是什么意思
- 2021-11-26 vue项目中如何引入iconfont图标库
- 汇编中偏移地址的理解
- Word2007删除页眉横线
- (转载)typed用法总结