题目描述: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搜索即可。注意要标记每个人只能做一项工作。

 // Work Assignment.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; const int MAX = ;
int n,ans, map[MAX][MAX],vis[MAX]; //第index项工作,现在前index-1项工作总费用
void DFS(int index, int sum)
{
//cout << "index:" << index << "\tsum:" << sum << "\tans:" << ans << endl;
if (index >= n)
{
ans = min(ans, sum);
return;
}
if (sum > ans) return; //分配给第i个人
for (int i = ; i < n; i++)
{
if (!vis[i])
{
vis[i] = ;
DFS(index + , sum + map[index][i]);
vis[i] = ;
} } } int main()
{
while (cin>>n && n)
{
for (int i = ; i < n;i++)
for (int j = ; j < n; j++)
cin >> map[i][j]; ans = 0x3f3f3f3f;
memset(vis, , sizeof(vis)); for (int i = ; i < n; i++)
{
vis[i] = ;
DFS(, map[][i]);
vis[i] = ;
} cout << ans << endl; } return ;
}

最新文章

  1. 试验添加RAC(ORA10G)节点
  2. csharp: DataRelation objects to represent a parent/child/Level relationship
  3. AFnetworking3.1的基本使用
  4. Arlenmbx!!!!
  5. s3c2440 移值u-boot-2016.03 第3篇 支持Nor flash 识别
  6. 一段OpenGL的简单代码
  7. Android自定义长按事件
  8. 【h5-egret】深入浅出对象池
  9. visio 2013 破解工具 - KMSpico
  10. oracle_windows下命令启动oracle监听和服务
  11. mybatis 一点整理
  12. Linux开发IDE打造
  13. [ext4]空间管理 - 与分配相关的关键数据结构
  14. LoadRunner基础知识
  15. helm-chart3,函数和管道
  16. vue组件系统
  17. LitJson 不支持 float 类型数据
  18. Oracle之多表查询
  19. SSH限制ip登陆
  20. js获取文件输入框的真实目录

热门文章

  1. 十一 队列 Queue
  2. C语言表结构(1)
  3. Linux 命令 - mknod
  4. P1063 计算谱半径
  5. 一个平凡计算机爱好者的linux进步之路
  6. Docker 学习之部署php + nginx(一)
  7. dubbo 相关面试题 有用(转)
  8. 解题报告:luogu P5020(NOIP 2018 D1T2)
  9. uboot配置和编译过程详解
  10. Verilog 2001 `default_nettype none