前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

网易笔试算法题:为工程师分配工作

qiguaw 2024-09-23 12:38:24 资源文章 16 ℃ 0 评论

问题描述

现在有 n 位工程师和 6 项工作(编号为 0 至 5),现在给出每个人能够胜任的工作序号表(用一个字符串表示,比如:045,表示某位工程师能胜任 0号,4号,5号 工作)。现在需要进入工作安排,每位工程师只能被安排到自己能够胜任的工作当中去,两位工程师不能安排到同一项工作当中去。如果两种工作安排中有一个人被安排在的工作序号不一样就被视为不同的工作安排,现在需要计算出有多少种不同工作安排计划。

输入描述:

输入数据有 n+1 行

第一行为工程师人数 n(1 <= n <= 6)

接下来的 n 行,每行一个字符串表示第 i(1 <= i <= n) 个人能够胜任的工作(字符串不一定等长的)

输出描述:

输出一个整数,表示有多少种不同的工作安排方案

输入例子

6

012345

012345

012345

012345

012345

012345

输出例子

720

可行方案数:
testcase:720

解题思路

本题可以使用回溯法发求解,对于第一个工程师依次安排它可以胜任的工作,然后按照此方法进行递归。如果所有工作都被安排出去,则算作一次有效的安排,可分配算数加一,具体步骤如下:

  • 设 map 变量记忆对应的工作是否分配出去
  • 从第一个到第 n 个,对于每个工程师依次按他可胜任工作进行判断,如果该工作未分配出去,则分配该工作,如果该工作已分配给他人,则不分配
  • 如果所有工作都分配完毕,则将分配方案计数加一

算法实现

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表