zoukankan      html  css  js  c++  java
  • 算法编程题积累(1)——网易笔试"工程师工作安排“问题

    首先理解题目意思:每个人只能做工作序号表里的一件工作且两个人不能同时做一件工作。
    AC思路:采用暴力枚举每种可能的分配方案,子问题的解决逐步向上解决了母问题,最终原问题得解。

    标程作者:NotDeep(牛客网)
    链接:https://www.nowcoder.com/discuss/22696?type=6&order=0&pos=5&page=2

     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 }
  • 相关阅读:
    链式栈的C++实现
    Java面试之设计模式二
    前端资源
    Java面试之异常
    Java面试之序列化
    Java面试之重写(Override)与重载(Overload)
    项目视图展示
    Java面试之集合
    Java面试之SSH框架面试题集锦
    JDBC技术
  • 原文地址:https://www.cnblogs.com/socrates-lzstu/p/6618986.html
Copyright © 2011-2022 走看看