17085 工作分配问题(优先做)

这个问题可以通过回溯法来解决。我们可以遍历所有可能的工作分配方案,然后找出总劳务费用最小的方案。

以下是C++代码实现:

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

const int INF = 1e9;
const int MAXN = 15;
int n;
int cost[MAXN][MAXN];
int dp[1 << MAXN];
int path[MAXN], bestPath[MAXN];
int minCost = INF;

void dfs(int u, int state, int sum) {
    if (sum >= minCost) return; // 剪枝
    if (u == n) {
        minCost = sum;
        copy(path, path + n, bestPath);
        return;
    }
    for (int i = 0; i < n; i++) {
        if (!(state >> i & 1)) {
            path[u] = i + 1;
            dfs(u + 1, state | 1 << i, sum + cost[u][i]);
        }
    }
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> cost[i][j];
        }
    }
    dfs(0, 0, 0);
    cout << minCost << endl;
    for (int i = 0; i < n; i++) {
        cout << bestPath[i] << ' ';
    }
    return 0;
}

在这段代码中,我们首先读取输入的工作数n和每个工作的劳务费用。然后我们使用深度优先搜索遍历所有可能的工作分配方案。对于每个方案,我们计算总劳务费用,并更新最小总劳务费用和最佳工作分配方案。最后,我们输出最小总劳务费用和最佳工作分配方案。

这段代码的时间复杂度是O(n!),因为我们需要遍历所有可能的工作分配方案。这段代码的空间复杂度是O(n),因为我们需要存储每个工作的劳务费用和工作分配方案。

相关推荐
_wxd6666 分钟前
STL-stack与queue与priority_queue(容器适配器)
c++
我命由我1234510 分钟前
人脸识别 - 人脸识别选帧
java·人工智能·python·算法·安全·java-ee·人脸识别
时针滴滴答啊12 分钟前
最大子数组和
算法·leetcode·职场和发展
zh路西法42 分钟前
【玩转VLA具身智能机械臂】(二):MoveIt2 运动规划——架构、配置与 C++ 上手
c++·机械臂·路径规划·vla·planner·moveit2
五月底_1 小时前
LIS算法
python·算法·最长子序列
学学酱快乐1 小时前
2026年PMP考试生命周期选择决策树精讲:从需求判断到混合型统一框架的应试全攻略
算法·决策树·机器学习·pmp新版考试大纲·pmp新题型·pmp培训哪家好·pmp培训机构推荐
爱和冰阔落1 小时前
【Linux】Ctrl+C 到底做了什么?从键盘、kill 到 alarm,一次讲清信号的产生
linux·运维·c++·安卓
傅科摆 _ py2 小时前
动态规划复习
算法·动态规划
水饺编程2 小时前
第5章,[Win32 章节] :贝塞尔样条曲线(一)
c语言·c++·windows·visual studio
Wang's Blog2 小时前
PostgreSQL笔记49:向量检索核心算法、索引调优与过滤策略深度解析
笔记·算法·postgresql