[编程题] 工作安排
来源:互联网 发布:数据库无法连接 编辑:程序博客网 时间:2024/05/22 17:33
http://blog.csdn.net/gddxmmxf/article/details/68946131
时间限制:1秒
空间限制:32768K
现在有n位工程师和6项工作(编号为0至5),现在给出每个人能够胜任的工作序号表(用一个字符串表示,比如:045,表示某位工程师能够胜任0号,4号,5号工作)。现在需要进行工作安排,每位工程师只能被安排到自己能够胜任的工作当中去,两位工程师不能安排到同一项工作当中去。如果两种工作安排中有一个人被安排在的工作序号不一样就被视为不同的工作安排,现在需要计算出有多少种不同工作安排计划。
输入描述:
输入数据有n+1行:
第一行为工程师人数n(1 ≤ n ≤ 6)
接下来的n行,每行一个字符串表示第i(1 ≤ i ≤ n)个人能够胜任的工作(字符串不一定等长的)
输出描述:
输出一个整数,表示有多少种不同的工作安排方案
输入例子1:
6
012345
012345
012345
012345
012345
012345
输出例子1:
720
package NeteaseSpring2017;
import java.util.Scanner;
//使用深度优先搜索查找可行方案
public class WorkArrangement{
staticintcount;//方案数
static intn;//工程师数
static int[][]matrix;//横坐标为人,纵坐标为工作
static int[]worked;//存储已分配出去的工作
static String[]abilities;//工程师技能字符串
public staticvoid dfs(inti)
{
if(i==n)//本轮分配结束
{
count++;
return;
}
for(int j=0;j<6;j++)
{
if(worked[j]==0&&matrix[i][j]==1)//工作j未分配出去且,且工程师i胜任j工作
{
worked[j]=1;//本轮将工作j分配出去
dfs(i+1);
worked[j]=0;//开始新一轮分配,清除工作j分配状态
}
}
}
public staticvoid main(String[]args)
{
Scanner scan = newScanner(System.in);
while(scan.hasNext())//接受多组输入
{
count=0;
n=Integer.parseInt(scan.nextLine());
abilities=new String[n];
worked=newint[6];
matrix=newint[n][6];
for(inti=0;i<n;i++)
{
abilities[i]=scan.nextLine();
for(intj=0;j<abilities[i].length();j++)//工程师i的胜任工作字符串
{
matrix[i][abilities[i].charAt(j)-'0']=1;//根据输入初始化工作适应性矩阵,工程师i是否胜任j工作
}
}
dfs(0);
System.out.println(count);
}
scan.close();
}
}
- [编程题] 工作安排
- [编程题] 工作安排
- 网易编程—工作安排
- 网易春招[编程题]工作安排@Java
- 网易2017春招编程题:工作安排 [python]
- 【算法题】工作安排
- 编程工作一天的时间安排!
- 工作安排
- 工作安排
- 工作安排
- 工作安排
- 工作安排
- 网易2017春招笔试真题编程题集合--工作安排
- 【网易2017实习生编程题】 工作安排 集合 奇怪的表达式求值 涂棋盘 小易记单词
- 【网易2017实习生编程题】 工作安排 集合 奇怪的表达式求值 涂棋盘 小易记单词
- 工作安排--网易2017春招实习笔试编程题6
- 最近的工作安排
- 年前工作安排
- Android Api demo系列(11) (App>Alarm警报管理员)
- 数据结构封装之 《SeqList顺序表》
- 2017搜狐笔试题(Java实现)
- NET如何做出老效果,表格操作很简单。
- POJ1459-Power Network
- [编程题] 工作安排
- 安卓项目五子棋代码详解(五)
- 中文词语语义相似度计算算法概述
- hdu6181 Two Paths 次短路模板
- POJ1372 Knight Moves
- Android之GPS定位类 LocationManager、LocationListener、GpsStatus.Listener、Location详解
- 【C语言】【unix c】文件夹的操作
- 迷宫的最短路径(按c++的python改写)
- 学习笔记(逆向汇编)Day16-Day20