这个问题是典型的回溯法,比八皇后问题简化一点,重要的是其中一个部分:在深搜过程中要进行值的判断,来决定是否停止当前的搜索,这对以减少运行时间十分重要,一开始我没有考虑这个问题,就导致很多样例都超时了。

题目如下:

有 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 std;
int N;
int people_work[15][15];
int vis[15]={0};
int cur[15];
int min_time;
int total=0;
void cal_min_time(int num){if(num==N){if(min_time==-1||total<min_time){min_time=total;}}else{for(int i=0;i<N;i++){if(!vis[i]){total+=people_work[num][i];if(min_time!=-1&&total>min_time){total-=people_work[num][i];continue;}vis[i]=1;cal_min_time(num+1);total-=people_work[num][i];vis[i]=0;}}}
}
int main()
{cin>>N;for(int i=0;i<N;i++){for(int j=0;j<N;j++){cin>>people_work[i][j];}}min_time=-1;cal_min_time(0);cout<<min_time;return 0;
}

回溯法求最佳工作分配方案相关推荐

  1. 回溯法求地图填色实验(剪枝)

    回溯法求地图填色(剪枝) 文章目录 回溯法求地图填色(剪枝) (一) 问题求解 思维风暴(之前瞎想的,可以跳过) (二)算法思想:回溯 伪代码: 时间复杂度分析: (三)剪枝方向 1. 下层节点选取 ...

  2. kmeans对自己的图像数据集聚类(及肘部法求最佳K值)

    pytorch实现kmeans(自己的图像数据集) 上篇笔记已经介绍了,如何加载自己的图像数据集.(加载数据集: https://blog.csdn.net/hnu_zzt/article/detai ...

  3. 回溯法求解:工作分配问题

    一.问题描述: 设有 n 件工作分配给 n 个人.将工作 i 分配给 j 个人所需的费用为  .试设计一个算法,为每个人都分配 1 件不同的工作,并使得总费用最小. 输入格式:第一行有 1 个正整数 ...

  4. 用回溯法求子集和的c++代码

    用回溯算法解决问题的一般步骤为: 一.定义一个解空间,它包含问题的解. 二.利用适于搜索的方法组织解空间. 三.利用深度优先法搜索解空间. 四.利用限界函数避免移动到不可能产生解的子空间. 问题的解空 ...

  5. 分油问题回朔法c语言算法,用回溯法求“韩信分油”问题所有解

    裴南平 摘要:回溯法是一种常用的计算机程序设计方法.使用回溯法解决"韩信分油问题"也称"泊松分酒问题",在算法中保存每一步执行的中间结果,程序扩展前,判斷程序是 ...

  6. 递归回溯法求数独全部解

    项目介绍 QT5做的数独求解程序,可以判断数独解的个数(如果非唯一解). 运行截图 源码说明 使用MSVC + QT5平台,故* .cpp和* .h文件均采用UTF8 + BOM编码.如果切换到Min ...

  7. 回溯法求矩阵最大连通块数

    题目: 编写程序,读入矩阵行数.列数及所有矩阵元素,矩阵中所有元素均为正整数,计算并打印出矩阵中的最大连通块数.注:如果两个元素值相同,并且上.下.左.右四个方向之一相邻,则称两个元素是连通的;连通关 ...

  8. 回溯法解决工作分配问题

    回溯法解决工作分配问题 问题描述: 设有n件工作分配给n个人.为第i个人分配工作j所需的费用为c[i][j] .试设计一个算法,计算最佳工作分配方案,为每一个人都分配1 件不同的工作,并使总费用达到最 ...

  9. 五大常用算法之四:回溯法

    http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741376.html 1.概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试 ...

最新文章

  1. VEEAM replication配置步骤
  2. python open encoding为无效的参数_TypeError:“encoding”是无效的关键字参数ex23.py
  3. ORA-01940 无法删除当前已连接的用户之解决方案
  4. puppet php,puppet入门实践
  5. 自制 QQ游戏 连连看 外挂 ~~
  6. 迭代器,生成器,三元表达式,列表解析式
  7. CCNA Cisco 安全配置
  8. Matplotlib——绘制散点图并连线
  9. 【Unity】ET框架学习笔记
  10. 3Dmax建模教程详细步骤3D建模速成入门到高级教程 小白必看
  11. 关于“墨者安全专家3.7”不得不说的事情
  12. 群晖如何建php网站_群晖建博客详细教程
  13. 资产监测技术中关于USIM卡座在PCB layut设计中注意事项浅谈
  14. Windows系统设置多账户步骤
  15. lammps一对一课程学习大纲
  16. 使用 Palette 提取图片调色板
  17. Python——turtle(海龟绘图)
  18. 计算机品牌企业关系图,AJ71C24-S3 画出PLC的I/O点与输入/输出设备的连接图或对应关系表, 三菱AJ71C24-S3 - 广州凌控...
  19. THREEJS导入外部OBJ+MTL后内存优化
  20. NASA电池数据下载使用

热门文章

  1. 【OBS】dll库加载路径中文问题
  2. 使用Postfix和Dovecot部署邮件系统
  3. Day8 每日打卡 -简单可预期
  4. 重新审视Visio的本质
  5. 动态输入数据并生成表格,带删除操作javascript
  6. 数字集成电路设计-13-常用模块集锦
  7. Linux shell:判断变量是否包含某个字符串的几种方法
  8. 使用Synergy控制实现一套键盘鼠标控制多台电脑(windows+linux)
  9. 关于mail mailx 以及sendmail 的理解
  10. 【流媒体】ffmpeg小结