zoukankan      html  css  js  c++  java
  • 员工分配工作(深度优先)

    题意:公司分配N项工作给N个员工,每个员工只能被分给1项工作,每个人处理工作的时间不同。求完成所有工作所需的最少时间。

    输入:第一行输入整数N,代表N个员工,员工编号从1到N(1<=N<=10)

        接下来输入一个N*N的二维矩阵task[N][N],其中task[i][j](0<=task[i][j]<=1000)代表第i项工作由j号员工完成所需的时间。

    输出:输出一个整数,代表工作完成所有工作所需的最少时间。

    样例:

    输入:

    6
    10 11 12 11 9 11
    11 9 10 13 11 12
    12 10 11 10 13 9
    9 14 9 10 10 11
    10 10 9 11 12 11
    10 7 10 10 10 8

    输出:

    54

    dfs暴力深搜(深度优先)

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int task[15][15]; //
     5 bool used[15];
     6 int ans;
     7 int n;
     8 void dfs(int x,int t){
     9     if(x==n){
    10         if(t<ans){
    11             ans=t;
    12         }
    13         return;
    14     }
    15     for(int i=0;i<n;i++){
    16         //判断员工是否被使用
    17         if(!used[i]){
    18             used[i]=true;
    19             dfs(x+1,t+task[x][i]);
    20             used[i]=false;
    21         }
    22     }
    23 }
    24 int main()
    25 {
    26     cin>>n;
    27     for(int i=0;i<n;i++){
    28         for(int j=0;j<n;j++){
    29            cin>>task[i][j];
    30         }
    31     }
    32     ans=200000;
    33     //从第0行开始搜,刚开始花费时间为0
    34     dfs(0,0);
    35     cout<<ans;
    36     return 0;
    37 }
  • 相关阅读:
    奔溃瞬间1
    面试知识点blog汇总
    贪心
    树 和 图
    DFS 和 BFS
    STL
    哈希表
    手写堆
    并查集
    二项式反演学习笔记
  • 原文地址:https://www.cnblogs.com/mld-code-life/p/12234839.html
Copyright © 2011-2022 走看看