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