1. 问题描述

有n(n≥1)个任务需要分配给n个人执行,每个任务只能分配给一个人,每个人只能执行一个任务,第i个人执行第j个任务的成本是c[i][j]。求出总成本最小的一种分配方案

2. 解题思路

将成本数组c的下标(加一后)(及对应的任务号码)进行全排列

#include <bits/stdc++.h>
using namespace std;#define INF 99999 // 最大成本值
#define MAXN 21
// 问题表示
int n = 4;
int c[MAXN][MAXN]= {{9, 2, 7, 8}, {6, 4, 3, 7}, {5, 8, 1, 8} ,{7, 6, 9, 4}};
vector<vector<int> >ps;void Insert(vector<int> s, int i, vector<vector<int> > &ps1) {vector<int> s1;vector<int>::iterator it;for(int j = 0; j < i; j++) { // 在每个位置插入is1 = s;it = s1.begin() + j; // 寻找插入位置s1.insert(it, i);ps1.push_back(s1);}
}void Perm(int n) {vector<vector<int> >ps1; // 临时存放子序列vector<vector<int> > :: iterator it; // 全排列迭代器vector<int> s, s1;s.push_back(1);ps.push_back(s);for(int i = 2; i <= n; i++) {ps1.clear();for(it = ps.begin(); it != ps.end(); it++) {Insert(*it, i, ps1);}ps = ps1;}
}void Allocate(int n, int &mini, int &minc) { // 求解任务分配问题的最优方案Perm(n);  // 可理解为将成本数组c的下标(加一后)(及对应的任务号码)进行全排列for(int i = 0; i < ps.size(); i++) { // ps.size() = 24int cost = 0;for(int j = 0; j < ps[i].size(); j ++) { // ps[i].size() = 4cost += c[j][ps[i][j] - 1];  // 计算出个任务排列所需要费用}if(cost < minc) { // 比较最小成本方案minc = cost;mini = i;}}
}int main() {int mincost = INF, mini; // mincost为最小成本,mini为ps中最优方案的编号Allocate(n, mini, mincost);cout << "最优方案:\n";for(int k = 0; k < ps[mini].size(); k++) {cout << "第" << k + 1 << "个人安排任务" << ps[mini][k] << endl;}cout << "总成本 = " << mincost;return 0;
}

4.2.8求解任务分配问题相关推荐

  1. 6-1 求解资源分配问题(动态规划法)[PTA]

    [PTA] 6-1 求解资源分配问题(动态规划法) 某公司有3个商店A.B.C,拟将新招聘的5名员工分配给这3个商店,各商店得到新员工后,每年的赢利情况如下表所示,求分配给各商店各多少员工才能使公司的 ...

  2. 动态规划法求解资源分配问题

    问题描述 资源分配问题是将数量一定的一种或若干种资源(原材料.资金.设备或劳动力等),合理地分配给若干使用者,使总收益最大. 例如,某公司有3个商店A.B.C,拟将新招聘的5名员工分配给这3个商店,各 ...

  3. 分枝限界法求解任务分配问题

    问题描述 有n(n≥1)个任务需要分配给n个人执行,每个任务只能分配给一个人,每个人只能执行一个任务. 第i个人执行第j个任务的成本是c[i][j](1≤i,j≤n).求出总成本最小的分配方案. 问题 ...

  4. python分支计算例题_算法第四次作业-分支限界法求解作业分配问题

    一.运行环境: Win7.Spyder.Python3.7 二.运行过程说明: 数据文件格式:输入数据来源于文件,input_assign04_0*.dat.文件内是n*n矩阵的元素,每行的元素代表每 ...

  5. 经典DP问题系列之三:求解资源分配问题(带路径存储)

    [问题描述] 某公司有3个商店A, B, C,拟将新招聘的5名员工分配给这3个商店,各商店得到的新员工后每年的赢利情况如表所示,求如何分配才能使利益最大化? 表 (右边数字是每个公司分配0 – 5个人 ...

  6. 【布局优化】基于粒子群算法求解集线器位置分配问题附matlab代码

    1 内容介绍 ​本文基于MATLAB软件结合粒子群算法,实现了粒子群算法中粒子的适应度计算,极大的减少了优化计算耗时,对适应度计算较为耗时的优化计算,有着明显的效果;最后本文采用粒子群优化算法优化计算 ...

  7. 负荷分配问题的动态规划算法递归实现

    本文是参加工作之初,研究水电站优化运行时所写,已成为遥远的过去了.记得当时好像是要投下稿,所以煞有介事的写了中英文摘要.学生时代曾经研究过用演化类算法求解负荷分配问题,那是刻意往"新&quo ...

  8. 多旅行商问题——公式和求解过程概述

    英文:The multiple traveling salesman problem an overview of formulations and solution procedures 摘要: 多 ...

  9. 从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附代码)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 1.跟踪基础知识简介 首先要说明一点,现在多目标跟踪算法的效果,与 ...

最新文章

  1. 108.什么是信道?109.信道分类 110.什么是模拟信号?什么是数字信号?
  2. 【PAT】A1060 Are They Equal *
  3. Social Media Modify case - still about attribute_ref
  4. .NET 6新特性试用 | 自动生成高性能日志记录代码
  5. java 两个sql文_Java和SQL取两个字符间的值
  6. 查一个字段中字符集超过30的列_详细解读MySQL的30条军规
  7. UBUNTU安装 SSH 服务
  8. Linux内核(4) - 内核学习的心理问题
  9. 宝宝树小时光品牌升级:让宝宝从小爱上阅读
  10. Qt编译报错:Error in Util.asciify(build-Project1_msvc-Desktop_Qt_5_8_0_MSVC2015_32bit_qt_58_w-Debug)
  11. 02-UI知识+Scen场景搭建
  12. 【03项目立项管理】【背诵版】
  13. 闲鱼的统一跨端 API 方案 —— Uni API
  14. Burp Suite之Scaner模块(三)
  15. 用故事解析setTimeout和setInterval(内含js单线程和任务队列)
  16. 易语言编译和c语言,易语言独立编译的EXE文件问题
  17. 信息论 | 计算离散信源的信息量和熵的MATLAB实现(函数封装调用)
  18. 《Java SE实战指南》15-04:接口和抽象类的区别
  19. ( 蚁群算法总结)何涛
  20. 摊上事儿的网易邮箱和安全圈的那些“防御机制”

热门文章

  1. Python Platform 平台信息
  2. IMX6ULL_PRO嵌入式开发板介绍
  3. python一个函数调用另一个函数中的变量_在Python 中同一个类两个函数间变量的调用方法...
  4. 赛门铁克盘点近期勒索软件犯罪档案
  5. pycharm 总弹出modify setUp的解决办法
  6. 【Proteus仿真】【STM32单片机】比赛计时计分系统设计
  7. 如何恢复Linux中的误删文件
  8. 无论你想发展的方向是什么,关注这些总没错!
  9. oh-my-posh安装过程问题及注意事项
  10. 美团点评技术与算法文章汇总,设计算法、前后端、客户端、小程序等