zoukankan      html  css  js  c++  java
  • ACM-Work Assignment

    题目描述:Work Assignment
     
    设有n件工作分配给n个人。将工作i 分配给第j 个人所需的费用为Cij。试设计一个算法,为每一个人都分配1 件不同的工作,并使总费用达到最小。 设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。

    输入

    第一行有1 个正整数n (1≤n≤30)。接下来的n行,每行n个数,表示工作费用。

    输出

    的最小总费用。

    样例输入

    3
    10 2 3
    2 3 4
    3 4 5

    样例输出

    9

    解题思路:按照工作任务DFS搜索即可。注意要标记每个人只能做一项工作。

     1 // Work Assignment.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 
     6 #include <iostream>
     7 #include <algorithm>
     8 #include <cstring>
     9 using namespace std;
    10 
    11 const int MAX = 50;
    12 int n,ans, map[MAX][MAX],vis[MAX];
    13 
    14 //第index项工作,现在前index-1项工作总费用
    15 void DFS(int index, int sum)
    16 {
    17     //cout << "index:" << index << "	sum:" << sum <<  "	ans:" << ans << endl;
    18     if (index >= n)
    19     {
    20         ans = min(ans, sum);
    21         return;
    22     }
    23     if (sum > ans) return;
    24 
    25     //分配给第i个人
    26     for (int i = 0; i < n; i++)
    27     {
    28         if (!vis[i])
    29         {
    30             vis[i] = 1;
    31             DFS(index + 1, sum + map[index][i]);
    32             vis[i] = 0;
    33         }
    34         
    35     }
    36         
    37 }
    38 
    39 int main()
    40 {
    41     while (cin>>n && n)
    42     {
    43         for (int i = 0; i < n;i++)
    44         for (int j = 0; j < n; j++)
    45             cin >> map[i][j];
    46 
    47         ans = 0x3f3f3f3f;
    48         memset(vis, 0, sizeof(vis));
    49 
    50         for (int i = 0; i < n; i++)
    51         {
    52             vis[i] = 1;
    53             DFS(1, map[0][i]);
    54             vis[i] = 0;
    55         }
    56             
    57 
    58         cout << ans << endl;
    59             
    60     }
    61 
    62     return 0;
    63 }
  • 相关阅读:
    std::sort运行出core(segment fault)
    C++编译报错:重复定义
    《改变世界的九大算法》读书笔记
    简单排序实现
    Django 常见错误总结
    python 进行机器学习
    python中matplotlib 的简单使用
    十四:生成器函数和迭代器函数
    十三:装饰器函数
    十二:重要的内置函数
  • 原文地址:https://www.cnblogs.com/x739400043/p/8507178.html
Copyright © 2011-2022 走看看