mysql第五章上机事务_算法第五章 | 上机实践报告

标签:

第五章 | 上机实践报告

一、 实践题目:工作分配问题

二、 问题描述

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

三、 算法描述

1.解题思路:以第一份工作为结点构造子集树,在Backtrack函数中进行深度搜索。如果sum > bestp,则该分支不满足条件,需要进行剪枝,而后回溯;如果满足sum < bestp,则继续深搜,直至叶节点;如果sum < bestp 且 已搜索至根节点时,则再次得到更优解。在整棵子集树遍历完毕后,最终得到问题的最优解。

2.代码如下:

void Backtrack(int t) {

for (int r = 1; r <= n; r++) {

if (sum > bestp) continue;

if (!b[r]) {

b[r] = 1;

sum += a[t][r];

if (t == n) {

if (sum < bestp)

bestp = sum;

}

else

if (sum < bestp)

Backtrack(t + 1);

sum -= a[t][r];

b[r] = 0;

}

}

}

四、 心得体会

1.对于典型的子集树问题,可套用子集树模板进行回溯、剪枝,从而求解问题。

2.对于模板的实现能力有待提升。

3.与队友进行交流,寻求不同的解法。我原本希望能用贪心法解决此题,然实验以失败告终,只得乖乖用回溯法解决。

标签:

来源: https://www.cnblogs.com/ljl-gd/p/10137109.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值