127
社区成员
设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij是从供应商j 处购得的部件i的重量,cij是相应的价格。
试设计一个算法,给出总价格不超过d的最小重量机器设计。输入格式:
第一行有3 个正整数n ,m和d, 0<n<30, 0<m<30, 接下来的2n 行,每行m个数。前n行是c,后n行是w。
输出格式:
输出计算出的最小重量,以及每个部件的供应商。
解空间是解空间树走到叶子节点的每个分支的路径,对于该题样例n=3,m=3,解空间为
(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 1), (1, 3, 2), (1, 3, 3)
(2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3)
(3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 1), (3, 3, 2), (3, 3, 3)
每个节点的状态值代表当前所选的机器商家的总价格,以及当前所选机器的总重。
回溯法是一种选优搜索法,就是按选优条件向前搜索,以达到目标。但是当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。但是这样可能会花费较多的时间,所以我们要运用限界函数和约束函数来进行剪枝,以减少探索的次数,减少搜索时间。
有固定的套路,找到对每一个层次的节点后进行深度优先搜索,遇到限制条件就return。
时间复杂度大,要减小时间耗费可以写剪枝函数。