1125. 最小的必要团队(dp压缩 + 路经的记录 )
创始人
2024-05-30 00:57:48
0

作为项目经理,你规划了一份需求的技能清单 req_skills,并打算从备选人员名单 people 中选出些人组成一个「必要团队」( 编号为 i 的备选人员 people[i] 含有一份该备选人员掌握的技能列表)。

所谓「必要团队」,就是在这个团队中,对于所需求的技能列表 req_skills 中列出的每项技能,团队中至少有一名成员已经掌握。可以用每个人的编号来表示团队中的成员:

  • 例如,团队 team = [0, 1, 3] 表示掌握技能分别为 people[0]people[1],和 people[3] 的备选人员。

请你返回 任一 规模最小的必要团队,团队成员用人员编号表示。你可以按 任意顺序 返回答案,题目数据保证答案存在。

示例 1:

输入:req_skills = ["java","nodejs","reactjs"], people = [["java"],["nodejs"],["nodejs","reactjs"]]
输出:[0,2]

示例 2:

输入:req_skills = ["algorithms","math","java","reactjs","csharp","aws"], people = [["algorithms","math","java"],["algorithms","math","reactjs"],["java","csharp","aws"],["reactjs","csharp"],["csharp","math"],["aws","java"]]
输出:[1,2]

解析:

    req_skills 用二进制表示

    arr1 记录第 i 个人得二进制掌握得skill( map)

    二进制 i  = 0 ~ n -1

    j为遍历arr1 配对得 people

     f[i] + 1  < f[i | peo[j]] // f[i] 加上 第 j个人

    pre[i | peo[j]][0] = i;

    pre[i | peo[j][1]] = j ; 1 为记录得第 j 个人

    ans[i] = pre[idex][1];

    idx = pre[idex][0] ; 找前驱

注意初始化 f[0] = 0  ;

当选择 第 j 个状态时 是由  f[i | peoskills[j] ]= min(f[i]  + 1,f[i | peoskills[j])

因为要记录路径所以写一种的 用 if 认为简单 

class Solution {
public:vector smallestSufficientTeam(vector& req_skills, vector>& people) {int n = req_skills.size();int f[1<<17];memset(f,0x3f3f3f,sizeof(f));vector ans;map m;int pskill[62];  //记录第 i 个人的 skill int pro[1<<17][2]; // pro[0] 记录 前驱       pro[1] 记录选的人得位置for(int i = 0;i < req_skills.size();i++){m[req_skills[i]]  = i;}f[0] = 0; // 初始化for(int i = 0;i < people.size();i++){int cur = 0;for(int j = 0;j < people[i].size();j++){cur  |= 1< 0;){ans.push_back(pro[i][1]);i = pro[i][0];}return ans;}
};/*req_skills 用二进制表示arr1 记录第 i 个人得二进制掌握得skill( map)二进制 i  = 0 ~ n -1j为遍历arr1 配对得 peoplef[i] + 1  < f[i | peo[j]] // f[i] 加上 第 j个人 pre[i | peo[j]][0] = i;pre[i | peo[j][1]] = j ; 1 为记录得第 j 个人 ans[i] = pre[idex][1];idx = pre[idex][0] ; 找前驱
*/

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...