读书人

回溯法求解最小重量机有关问题

发布时间: 2013-10-15 16:47:37 作者: rapoo

回溯法求解最小重量机问题

描述

设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wiy是从供应商j 处购得的部件i的重量,ciy是相应的价格。试设计一个算法,给出总价格不超过c的最小重量机器设计。

对于给定的机器部件重量和机器部件价格,编程计算总价格不超过d的最小重量机器设计。

输入

第一行有3 个正整数n ,m和d。接下来的2n 行,每行n个数。前n行是c,后n行是w。

输出

将计算出的最小重量,以及每个部件的供应商

样例输入

3 3 4
1 2 3
3 2 1
2 2 2
1 2 3
3 2 1
2 2 2

样例输出

4
1 3 1

bool backtrack(int i) // 搜索到第i个零件

{

if(i>n)

按算法特征 ,此时解为最优;

return true;

else

bool found=false;

if(当前最优解<d)

found=true;

for(j=1;j<=m;j++) //考虑每一个供应商供应i零件的情况

{

更新总重量;

更新总价格;

if(价格<=d, 总量<目前最优解)

if( backtrack(i+1))

return ture;

还原重量;

还原价格;

}

return found;

}

算法优化:

在考虑供应商时,设置mark[][]数组;

若对于某一件产品, 对于某一供应商来讲,存在价格和重量都占优势的其他供应商,那么在回溯时此供应商不予考虑

读书人网 >编程

热点推荐