回溯法求工作分配问题

本文介绍了一个利用回溯法解决的工作分配问题,重点在于在深搜过程中通过剪枝优化算法效率,避免当部分工作时间总和超过已有最小值时继续计算。问题要求将n份工作分配给n个人,使总完成时间最小。输入包含工作人数n及工作时间矩阵,输出最小时间总和。题目限制n≤15,tik≤10^4。
摘要由CSDN通过智能技术生成

首先,这个问题是个基本的回溯问题,我想说的重要的一点就是,在深搜过程中,如果中途遇到部分值已经大于前面所得的最小值,此时应该省去后面部分的计算,这对于算法的运行时间会产生很大的影响,我已开始没有考虑这些,就有四个样例始终超时!!!

 

题目如下:

有 n 份工作要分配给 n 个人来完成,每个人完成一份。第 i 个人完成第 k 份工作所用的时间为一个正整数 tik,其中1 ≤ i, k ≤ n。试确定一个分配方案,使得完成这 n 份工作的时间总和最小。

输入

输入包含 n + 1 行。

第 1 行为一个正整数 n。

第 2 行到第 n + 1 行中每行都包含 n 个正整数,形成了一个 n × n 的矩阵。在该矩阵中,第 i 行第 k 列元素 tik 表示第 i 个人完成第 k 件工作所要用的时间。

输出

1 行,包含一个正整数,表示所有分配方案中最小的时间总和。

输入样例

5
9 2 9 1 9
1 9 8 9 6
9 9 9 9 1
8 8 1 8 4
9 1 7 8 9

输出样例

5

限制

1 ≤ n ≤ 15

1 ≤ tik ≤ 10^4

#include <iostream>

using namespace st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值