6、工作安排--2017网易春招

[编程题] 工作安排

时间限制:1秒

空间限制:32768K

现在有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

解题思路:每个人只能做工作序号表里的一件工作且两个人不能同时做一件工作。

AC思路:采用暴力枚举每种可能的分配方案,子问题的解决逐步向上解决了母问题,最终原问题得解。

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 vector<string> a; //a保存工作序号表
 6 int n;
 7 int b[10]; //标志数组b[i]用来记录编号为i的工作是否已经被分配,为0表示已分配,为1表示未分配
 8 int ret;   //记录分配计划数目
 9
10 void dfs(int i) {//dfs[i]指当编号为0到i-1的人都已分配好工作时为编号为i到a.size()-1的人分配工作
11     if(i == a.size()) {
12         ret++;  //一种分配方案结束
13     } else {
14         for(int j = 0; j < a[i].size(); j++) {
15             if(b[a[i][j] - ‘0‘]) {
16                 b[a[i][j] - ‘0‘] = 0;
17                 dfs(i + 1);
18                 b[a[i][j] - ‘0‘] = 1;
19             }
20         }
21     }
22 }
23
24 int main() {
25
26     while(cin >> n) {
27         for(int i = 0; i < n; i++) {
28             string x; cin >> x;
29             a.push_back(x);
30         }
31         for(int i = 0; i < 10; i++) b[i] = 1;
32         ret = 0;
33         dfs(0);
34         cout << ret << endl;
35     }
36     return 0;
37 }
时间: 2024-12-28 01:15:44

6、工作安排--2017网易春招的相关文章

11、堆砖块--2017网易春招

[编程题] 堆砖块 时间限制:1秒 空间限制:32768K 小易有n块砖块,每一块砖块有一个高度.小易希望利用这些砖块堆砌两座相同高度的塔.为了让问题简单,砖块堆砌就是简单的高度相加,某一块砖只能使用在一座塔中一次.小易现在让能够堆砌出来的两座塔的高度尽量高,小易能否完成呢. 输入描述: 输入包括两行: 第一行为整数n(1 ≤ n ≤ 50),即一共有n块砖块 第二行为n个整数,表示每一块砖块的高度height[i] (1 ≤ height[i] ≤ 500000) 输出描述: 如果小易能堆砌出

12、分饼干--2017网易春招

[编程题] 分饼干 时间限制:1秒 空间限制:32768K 易老师购买了一盒饼干,盒子中一共有k块饼干,但是数字k有些数位变得模糊了,看不清楚数字具体是多少了.易老师需要你帮忙把这k块饼干平分给n个小朋友,易老师保证这盒饼干能平分给n个小朋友.现在你需要计算出k有多少种可能的数值 输入描述: 输入包括两行: 第一行为盒子上的数值k,模糊的数位用X表示,长度小于18(可能有多个模糊的数位) 第二行为小朋友的人数n 输出描述: 输出k可能的数值种数,保证至少为1 输入例子: 999999999999

9、涂棋盘--2017网易春招

[编程题] 涂棋盘 时间限制:1秒 空间限制:32768K 小易有一块n*n的棋盘,棋盘的每一个格子都为黑色或者白色,小易现在要用他喜欢的红色去涂画棋盘.小易会找出棋盘中某一列中拥有相同颜色的最大的区域去涂画,帮助小易算算他会涂画多少个棋格. 输入描述: 输入数据包括n+1行: 第一行为一个整数n(1 ≤ n ≤ 50),即棋盘的大小 接下来的n行每行一个字符串表示第i行棋盘的颜色,'W'表示白色,'B'表示黑色 输出描述: 输出小易会涂画的区域大小 输入例子: 3 BWW BBB BWB 输出

网易春招笔试题 工作安排

链接:https://www.nowcoder.com/questionTerminal/728fcf136ca1488b8043c82fd2b181da来源:牛客网 现在有n位工程师和6项工作(编号为0至5),现在给出每个人能够胜任的工作序号表(用一个字符串表示,比如:045,表示某位工程师能够胜任0号,4号,5号工作).现在需要进行工作安排,每位工程师只能被安排到自己能够胜任的工作当中去,两位工程师不能安排到同一项工作当中去.如果两种工作安排中有一个人被安排在的工作序号不一样就被视为不同的工

关于找工作(大四的春招时期)

想记录一下这一个月找工作之中发生的一些事,参考价值嘛,肯定是有的,但是前提是你们能先看完我流水账般的记录,我是普通二本学校的计算机专业,刚开始投简历是是3月十几号,那时候百度搜了超多求职APP,然后海投,然而都是石沉大海,没有任何回音,后来想是不是简历的问题,也有在网上找了个帮忙修改简历的店,结果,花了钱,给了资料,修改了简历之后(第一次大修改),投了,然后是到20号有的第一家面试,那时候还不太清楚求职骗局,一接到电话有面试就直接开开心心地去了,后来..去到发现是培训公司,没错,就是遍布全国的某

2017百度春招&lt;不等式排列&gt;

题目: 度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列.但是现在度度熊手中只有k个小于符号即('<'')和n-k-1个大于符号(即'>'),度度熊想知道对于1至n任意的排列中有多少个排列可以使用这些符号使其为合法的不等式数列. 解析: 动态规划问题 dp[i][j] = (dp[i - 1][j - 1] * (i - j) + dp[i - 1][j] * (j

2017网易秋招编程集合

CPP http://blog.csdn.net/achiberx/article/details/74058208 [编程题]回文序列 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列.现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数

网易春招编程_赶去公司

终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0)街道,办公室在(gx,gy)街道上.小易周围有多个出租车打车点,小易赶去办公室有两种选择,一种就是走路去公司,另外一种就是走到一个出租车打车点,然后从打车点的位置坐出租车去公司.每次移动到相邻的街道(横向或者纵向)走路将会花费walkTime时间,打车将花费taxiTime时间.小易需要尽快赶到公司去,现在小易想

2017网易秋招--7、买苹果

题目描述:(DP问题) 小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分). 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带.如果不能购买恰好n个苹果,小易将不会购买. 输入描述: 输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果 输出描述: 输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1 输入例子: 20 输出例子: 3 思路:DP问题.首先dp[i] = min(dp[i],dp[i-a[j