算法第5章上机实践
问题描述:
n件工作分配给n个工人,所以每个工人必须做不同的工作。由于每个工人做对应的n份工作的工钱不同,所以总费用情况不一样,在这里要用到回溯的搜索办法来求解最小花费。
算法描述(包括解空间,画出测试样例的解空间树,剪枝(约束函数或限界函数)方法描述)
解空间 是 n!;由于每个工人选择的工作必须不同,然后有n个工人。
约束函数和限界函数:
约束函数:if(cnt+a[i][j]>m)return; 就是目前算工钱算到第n个人(不是最后一个)已经比最优解大的时候,
限界函数:i<=n; 分配完即结束。
这次实践在两小时时间里一直纠结第一题,然后老是一个答案错误一个超时,由于一开始没想到用结构体进行平均价值排序(因为不想用的这么复杂)就复制了网上的冒泡排序,然而后来才发现根本的问题就是网上用的这个排序是不符合这道题目的,然后第二题感觉难度不是很大,跟之前的旅行城市的问题很像。做第一题还发现了一个问题,就是在bound()函数里面,算剩余可获得最大价值那里,我感觉是有问题的,虽然我的答案用贪心法做出来结果正确了,但是我觉得用动态规划才是最准确的,因为贪心法在这种时候可能会遇到这种问题 ,剩余可承受重量为5,然后平均价值最高的是一个四千克的物品,然而还有两个分别为2、3千克的物品价值和是比它大的,这时候在剪枝这里可能就会出现问题了,然而pta上程序还是过了。这道题对有些0-1背包问题用贪心法对我觉得是因为那几个问题可以比例装入,就是可以部分装,而我们这道题是不可以的!
posted on 2018-12-22 15:26 suanfasfather 阅读(106) 评论(0) 编辑 收藏 举报