分配甲、乙、丙、丁四人去完成五项任务,每人完成各项任务的时间如下表所示。由于任务数多于人数,故规定其中有一个人可完成两项任务,其余三人每人只完成一项任务。试确定总花费时间最少的分配任务方案。(只建立模型,不必求解)

人员\任务 A B C D E
9 2 4 15 9
6 5 12 4 2
11 7 13 4 17
19 11 15 8 9

建立模型:
解法一:暴力搜索
数据规模较小,可以暴搜求解。

#include <bits/stdc++.h>using namespace std;
int a[5][6] = {{0, 0,  0,  0,  0,  0},{0, 9,  2,  4,  15, 9},{0, 6,  5,  12, 4,  2},{0, 11, 7,  13, 4,  17},{0, 19, 11, 15, 8,  9}};
bool v[10];
map<int, string> mp;
struct sta {int sum, two;pair<int, int> c;vector<pair<int, int> > one;
};
vector<sta> sch;void dfs(int u, sta now) {if (u == 5) {if (!sch.empty() && sch.back().sum > now.sum)sch.clear();if (sch.empty() || sch.back().sum == now.sum)sch.push_back(now);return;}if (!sch.empty() && sch.back().sum < now.sum)return;vector<int> c;for (int i = 1; i <= 5; i++)if (!v[i])c.push_back(i);if (u == 4 && c.size() == 2) {v[c[0]] = true, v[c[1]] = true;sta nex = now;nex.two = u;nex.sum += a[u][c[0]] + a[u][c[1]];nex.c = make_pair(c[0], c[1]);dfs(u + 1, nex);v[c[0]] = false, v[c[1]] = false;return;}for (int i = 0; i < c.size(); i++) {sta nex = now;nex.sum += a[u][c[i]];nex.one.emplace_back(u, c[i]);v[c[i]] = true;dfs(u + 1, nex);v[c[i]] = false;}for (int i = 0; i < c.size(); i++)for (int j = i + 1; j < c.size(); j++) {v[c[i]] = true, v[c[j]] = true;sta nex = now;nex.two = u;nex.sum += a[u][c[i]] + a[u][c[j]];nex.c = make_pair(c[i], c[j]);dfs(u + 1, nex);v[c[i]] = false, v[c[j]] = false;}
}int main() {sta now = {0, 0, {0, 0}, {}};dfs(1, now);mp[1] = "甲", mp[2] = "乙", mp[3] = "丙", mp[4] = "丁";printf("总最小花费时间为:%d\n", sch.back().sum);for (int i = 0; i < sch.size(); i++) {cout << "方案" << i + 1 << ":" << endl;cout << mp[sch[i].two] << "完成任务:" << (char) ('A' + sch[i].c.first - 1) << "和"<< (char) ('A' + sch[i].c.second - 1) << endl;for (int j = 0; j < sch[i].one.size(); j++) {cout << mp[sch[i].one[j].first] << "完成任务:" << (char) ('A' + sch[i].one[j].second - 1) << endl;}puts("");}return 0;
}
总最小花费时间为:25
方案1:
甲完成任务:B和C
乙完成任务:A
丙完成任务:D
丁完成任务:E

解法二:费用流
建图方式如下图,跑最小费用最大流即可。

#include<bits/stdc++.h>using namespace std;
const int N = 20, M = 200;struct EK {int s, t, head[N], ver[M], Next[M], tot = 1, pre[N];int mxf, ans, edge[M], c[M], d[N], h[N], n;inline void add(int x, int y, int z, int w) {n = max({n, x, y});ver[++tot] = y, Next[tot] = head[x], edge[tot] = z, c[tot] = w, head[x] = tot;ver[++tot] = x, Next[tot] = head[y], edge[tot] = 0, c[tot] = -w, head[y] = tot;}priority_queue<pair<int, int> > q;inline bool dijkstra() {memset(d, 0x3f, sizeof(int) * (n + 1));while (!q.empty())q.pop();q.push({0, s}), d[s] = 0;while (!q.empty()) {pair<int, int> u = q.top();q.pop();if (d[u.second] < -u.first)continue;for (int i = head[u.second]; i; i = Next[i]) {int y = ver[i], z = edge[i], w = c[i];if (!z || d[y] <= d[u.second] + w + h[u.second] - h[y]) continue;d[y] = d[u.second] + w + h[u.second] - h[y], pre[y] = i;q.push({-d[y], y});}}return d[t] != 0x3f3f3f3f;}inline void upd() {for (int i = 0; i <= n; i++)h[i] += d[i];int x = t, now = 0x3f3f3f3f;while (x != s)now = min(now, edge[pre[x]]), x = ver[pre[x] ^ 1];mxf += now, ans += now * h[t];x = t;while (x != s)edge[pre[x]] -= now, edge[pre[x] ^ 1] += now, x = ver[pre[x] ^ 1];}inline int solve() {while (dijkstra())upd();return ans;}inline void init() {memset(head, 0, sizeof(int) * (n + 1));memset(h, 0, sizeof(int) * (n + 1));tot = 1, mxf = ans = n = 0;}
} E;int a[5][6] = {{0, 0,  0,  0,  0,  0},{0, 9,  2,  4,  15, 9},{0, 6,  5,  12, 4,  2},{0, 11, 7,  13, 4,  17},{0, 19, 11, 15, 8,  9}};
vector<int> e[5][2];
vector<int> ans[5];
map<int, string> mp;int main() {E.s = 0, E.t = 15;E.add(E.s, 5, 1, 0);for (int i = 1; i <= 4; ++i) {E.add(E.s, i, 1, 0);E.add(5, 5 + i, 1, 0);}for (int i = 1; i <= 4; ++i)for (int j = 1; j <= 5; ++j) {E.add(i, j + 9, 1, a[i][j]);e[i][0].push_back(E.tot);E.add(i + 5, j + 9, 1, a[i][j]);e[i][1].push_back(E.tot);}for (int i = 10; i <= 14; ++i)E.add(i, E.t, 1, 0);E.solve();bool flag = false;for (int i = 1; i <= 4; ++i) {for (int j:e[i][0])if (!E.edge[j ^ 1]) {ans[E.ver[j]].push_back(E.ver[j ^ 1] - 9);break;}if (!flag)for (int j:e[i][1])if (!E.edge[j ^ 1]) {flag = true, ans[E.ver[j] - 5].push_back(E.ver[j ^ 1] - 9);break;}}mp[1] = "甲", mp[2] = "乙", mp[3] = "丙", mp[4] = "丁";printf("总最小花费时间为:%d\n", E.ans);for (int i = 1; i <= 4; ++i) {if (ans[i].size() == 2)cout << mp[i] << "完成任务:" << (char) ('A' + ans[i][0] - 1) << "和"<< (char) ('A' + ans[i][1] - 1) << endl;elsecout << mp[i] << "完成任务:" << (char) ('A' + ans[i][0] - 1) << endl;}return 0;
}
总最小花费时间为:25
甲完成任务:C和B
乙完成任务:A
丙完成任务:D
丁完成任务:E

分配甲、乙、丙、丁四人去完成五项任务,每人完成各项任务的时间如下表所示相关推荐

  1. 甲乙丙丁四个人去商店每人买了一台计算机,寒假数学作业一

    寒假作业一 一.选择题: 1.2002)1(-的值 ( ) A. 2000 B.1 C.-1 D.-2000 2.a 为有理数,则2000 11 +a 的值不能是 ( ) A.1 B.-1 C .0 ...

  2. 甲乙丙丁四个小偷c语言,魔屠苍生

    第1章 诞生虚空 无垠的虚空,忽然一道红雷从虚空外闪落进来.一时间,整个虚空都在颤抖,仿佛见到了什么可怕东西. 红雷进入虚空后竟诡异凝聚成了个蛋,透过蛋外的红芒,可以模糊看见个人形生物正在蛋里孕养.日 ...

  3. C语言:甲乙丙三人放鞭炮,求鞭炮响声问题

    **问题描述:**甲.乙.丙三人同时放鞭炮,甲每隔A秒放一个,乙每隔B秒放一个,丙每隔C秒放一个,他们各自放D个,对任意给定的A.B.C.D,求能听到多少声炮响(多个鞭炮一起响算作一声) /*1.甲乙 ...

  4. 甲乙丙三人一起进行百米赛跑(假定三人均为匀速直线运动)如果当甲到达终点时,乙距终点有5米,丙距终点还有10米,那么当乙到达终点时,丙距终点还有()米

  5. 鞭炮游戏 甲、乙,丙三人同时开始放第一个鞭炮

    例5.8 甲.乙,丙三人同时开始放第一个鞭炮,以后甲每隔5秒放一个,乙每隔6秒放一个,丙每隔7秒放一个.每人各放21个鞭炮.问一共能听到多少次鞭炮声? C语言期末 下面展示一些 内联代码片. // # ...

  6. 六年级有甲乙丙三个班c语言,黄瓜怎么做好吃C语言逻辑推理例题(附答案)吝啬的近义词...

    好心情美文网-severely歌词2020年12月1日发(作者:蒋祝平) 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. C语言逻辑推理例题(多重循环) 例1明明找不到铅笔盒了,妈妈对 ...

  7. 即便您是个跑龙套的甲乙丙丁,也该认真对待您自个的角色

    即便您是个跑龙套的甲乙丙丁,也该认真对待您自个的角色.角色无大小,只要全力以赴,尽心尽力做到就好了.   只是效法大哥行了,一条,从一条开始, 感受到难,才是成长中呢!  如不感觉难,就是进步没有那么 ...

  8. python猜名词甲乙丙_用python实现了一下:甲乙两人互猜数字(数理逻辑)

    #-*- coding: utf-8 -*-#!/usr/local/bin/python defis_prime2(number):'''判断数字是否是特殊质数(数学上质数和分解因子相同的数).分解 ...

  9. 郭靖和黄蓉竟然是这样死的!---某些人最近看了柴静的《穹顶之下》后狂喷她,这些人可能就是本文中的甲乙丙丁

    转载地址:http://help.3g.163.com/15/0305/11/AJUICPKN00964K7O.html, 作者:龅牙赵 公元1273年,蒙古大军压境.虽然14年前独臂大侠杨过已经飞石 ...

  10. [C趣味编程]甲乙丙渔夫分鱼

    甲.乙.丙三位渔夫出海打渔,他们随船带了21个筐. 当晚返航时,他们发现有七个筐装满了鱼,还有七个筐装了半筐鱼,另外七只则是空的. 由于他们没有秤,只好通过目测认为7个满筐的重量是相等的,七个半筐的重 ...

最新文章

  1. MySQL Innodb日志机制深入分析
  2. R语言ggplot2可视化散点图、可视化两个数值变量之间的关系、使用geom_smooth函数基于loess方法拟合数据点之间的趋势关系曲线、自定义数据点的大小、色彩、添加主标题、副标题、题注信息
  3. 【数字信号处理】线性时不变系统 LTI ( 判断某个系统是否是 “ 非时变 “ 系统 | 案例二 )
  4. oracle中国授权机构查询,oracle授权查询
  5. 把List对象或者单值对象转换为Json格式
  6. Linux中使用crontab命令启用自定义定时任务
  7. 怎么测试网络带宽_性能测试案例与经验分享
  8. 5G更大的发展在于产业应用
  9. Java 并发 —— Java 标准库对并发的支持及 java.util.concurrent 包
  10. Bootstrap 模态框(Modal)插件
  11. 应用机器学习(九):主成分分析
  12. ETL工具-Taskctl在Windows作业类型的使用(Soap服务驱动)
  13. 惊!STM32 蓝牙串口模块(H21/JDY-31) 竟如此简单!
  14. Wincc RT Professional第一讲-组态
  15. 系统全面讲解word中选择性粘贴命令
  16. image caption笔记(八):《From Captions to Visual Concepts and Back》
  17. 全国主要城市经纬度表
  18. 谈谈Sublime Text 3 与 Soda Theme
  19. 【全是干货】杭州心田花开:小学语文30个俗语,解释+例句,作文里的点睛之笔
  20. 大数据随记 —— Hadoop 环境搭建

热门文章

  1. html如何制作左侧导航栏,Html学习之十三(导航栏的制作)
  2. Java实战项目-移动电商秒杀系统seckill优化
  3. Verilog HDL 实现 74HC595
  4. 干法读后感--磨练灵魂 提升心志
  5. IcedTea:首个100%兼容、开源的Java
  6. 【微信篇】电脑版微信的照片视频文件位置变化
  7. MATLAB中有关矩阵特征值和特征向量的计算
  8. 神经元结构示意图讲解图,神经元的结构示意图
  9. 数据库原理及应用习题三
  10. MySQL数据库实验(六):创建学生信息管理系统