博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法第五章上机实践报告
阅读量:5320 次
发布时间:2019-06-14

本文共 1013 字,大约阅读时间需要 3 分钟。

1. 实践题目

工作分配问题

2. 问题描述

设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。

输入格式:

输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。

输出格式:

将计算出的最小总费用输出到屏幕。

输入样例:

在这里给出一组输入。例如:

310 2 32 3 43 4 5

输出样例:

在这里给出相应的输出。例如:

  9

3. 算法描述

解空间:{1,2,······,n} ,第一个元素为第一个工作,元素内容对应为第几个人

解空间树:排列树

剪枝函数:在访问某结点前先进行判断 if (cc+a[i][x[j]]<bestc),从而进行剪纸

1 #include 
2 using namespace std; 3 4 int n;//work 5 int bestc;//最优费用 6 int cc=0;//当前费用 7 int x[1000];//当前解 8 int a[21][21];//对应工作费用 9 10 void Backtrack(int i){
//第i个工作分配 11 if (i>n){12 if(cc
>n;30 for(int i=1;i<=n;i++){31 for(int j=1;j<=n;j++){32 cin>>a[i][j];33 bestc+=a[i][j];34 } 35 }36 for(int i=1 ;i<=n;i++)//对x数组进行顺序初始化37 x[i] = i;38 Backtrack(1);39 cout<
<

4. 心得体会

写代码时先确定解空间树是排列树,然后套用排列树的模板,再考虑限定条件,当当前费用加下一个结点对应费用大于当前最优费用时就进行剪枝,按照这个思路去做,虽然过程中也遇到一些细节问题,但还是很顺利的ac了

 

 

转载于:https://www.cnblogs.com/xjsunshine/p/10164363.html

你可能感兴趣的文章
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
使用命令创建数据库和表
查看>>
linux下Rtree的安装
查看>>
【转】redo与undo
查看>>
安卓当中的线程和每秒刷一次
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
标识符
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
内存地址对齐
查看>>
创新课程管理系统数据库设计心得
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>