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