码迷,mamicode.com
首页 > 编程语言 > 详细

左神算法进阶班5_3求公司的最大活跃度

时间:2019-06-23 17:23:48      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:mat   决定   oss   展开   tor   获取   svi   stream   out   

【题目】

一个公司的上下节关系是一棵多叉树,这个公司要举办晚会,你作为组织者已经摸清了大家的心理:

一个员工的直接上级如果到场,这个员工肯定不会来。

每个员工都有一个活跃度的值,决定谁来你会给这个员工发邀请函,怎么让舞会的气氛最活跃?

返回最大的活跃值。

举例:

给定一个矩阵来表述这种关系

matrix =

{

1,6

1,5

1,4

}

这个矩阵的含义是:

matrix[0] = { 1 , 6 },表示0这个员工的直接上级为1, 0这个员工自己的活跃度为6

matrix[1] = { 1 , 5 },表示1这个员工的直接上级为1(他自己是这个公司的最大boss), 1这个员工自己的活跃度为5

matrix[2] = { 1 , 4 },表示2这个员工的直接上级为1, 2这个员工自己的活跃度为4

为了让晚会活跃度最大,应该让1不来,0和2来。最后返回活跃度为10

【题解】

使用动态规划

每个节点保存其活跃度

然后嘛整棵树按照等级进行展开

x1来的活跃度为:x1的活跃度 + x1所有子节点不来的活跃度

x1不来的活跃度:x1不来 + x1所有子节点的每个节点中的max(来,不来)

 

【代码】

  

 1 #pragma once
 2 #include <iostream>
 3 #include <vector>
 4 
 5 using namespace std;
 6 
 7 void process(vector<vector<int>>data, vector<vector<int>>&dp, vector<bool>isVist, int& root)
 8 {
 9     isVist[root] = true;//遍历过
10     dp[root][1] = data[root][1];//获取活跃值
11     for (int i = 0; i < data.size(); ++i)
12     {
13         if (data[i][0] == root && !isVist[i])
14         {
15             process(data, dp, isVist, i);
16             dp[root][1] += dp[i][0];
17             dp[root][0] += dp[i][0] > dp[i][1] ? dp[i][0] : dp[i][1];
18         }
19     }
20 }
21 
22 
23 
24 //使用动态规划解题
25 int getMaxHappy(vector<vector<int>>data)
26 {
27     vector<vector<int>>dp(data.size(), vector<int>(data[0].size(), 0));
28     vector<bool>isVist(data.size(), false);
29     int root = 0;//找到boss
30     for (int i = 0; i < data.size(); ++i)
31         if (data[i][0] == i)//自己是自己的 上司,则此人为boss
32         {
33             root = i;
34             break;
35         }
36     process(data, dp, isVist, root);
37     return dp[root][0] > dp[root][1] ? dp[root][0] : dp[root][1];
38 }
39 
40 
41 void Test()
42 {
43     vector<vector<int>>data;
44     data = { {1,6},{1,5},{1,4} };
45     cout << getMaxHappy(data) << endl;
46 }

 

左神算法进阶班5_3求公司的最大活跃度

标签:mat   决定   oss   展开   tor   获取   svi   stream   out   

原文地址:https://www.cnblogs.com/zzw1024/p/11073295.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!