递归找到最便宜的解决方案

时间:2015-03-19 14:19:11

标签: java arrays recursion

我有这个问题要做:

  

使用Recursion编写一个函数来执行以下操作:您是一个小工厂的经理。你有7名工人和7个工作要做。每个工人只分配一份工作。每个工人要求每份工作都有不同的工资。 (例如:工人Archie要求10美元焊接,15美元用于木工等。工人Jughead要求12美元用于焊接,5美元用于木工等。)找到最便宜的工作任务。

我已经创建了这八个关于每个工人要求多少的课程: 一个可能不必要的超类

public class Workers
{
public int doCarpentry()
    {return 0;}
public int doWelding()
    {return 0;}
public int doMechanic()
    {return 0;}
public int doCleaning()
    {return 0;}
public int doDishes()
    {return 0;}
public int doPlumbing()
    {return 0;}
public int doCashier()
    {return 0;}       
}

其他七个都看起来像这样:

public class Jennifer extends Workers
{
public int doCarpentry()
    {return 10;}
public int doWelding()
    {return 10;}
public int doMechanic()
    {return 12;}
public int doCleaning()
    {return 12;}
public int doDishes()
    {return 8;}
public int doPlumbing()
    {return 9;}
public int doCashier()
    {return 10;}       
}

public class Linda extends Workers 
{
public int doCarpentry()
    {return 9;}
public int doWelding()
    {return 13;}
public int doMechanic()
    {return 10;}
public int doCleaning()
    {return 9;}
public int doDishes()
    {return 12;}
public int doPlumbing()
    {return 14;}
public int doCashier()
    {return 9;}       
}

我试图创建一个Manager类,我完全感到困惑。我甚至不知道从哪里开始,特别是因为我需要使用递归。请帮忙!

2 个答案:

答案 0 :(得分:0)

从数学的角度来看,你试图最小化7个方程的系统

10c1+10w+12m+12c2+ 8d+ 9p+10c3  //jennifer
 9c1+13w+10m+ 9c2+12d+14p+ 9c3  //linda
...

,其中

c1 is carpentry
w is welding
...

并且每个变量必须等于" 1"在整个系统中只有一次," 0"所有其他时间。

尝试从此开始。 你代表,更进一步,是不够的。你不能为每个人上课。

答案 1 :(得分:0)

好的,一些提示:

您可以在此处大大简化状态表示。这里最容易使用的是7x7成本矩阵,每行代表一个工人,每一列都要完成一项工作,每个单元都是成本。或者,您可以创建一个类工作者等。但请不要为每个工作实例创建一个类和7个方法。

现在,真正的问题是寻找最佳解决方案。选择每个工人要完成的工作排列。你明显有7个!这里的选项(为第一个工人选择7个工作中的1个,为第二个工人选择6个工作中的1个,等等)。

递归进来的地方。你可以做出第一个选择,然后再次调用你的方法做出第二个选择,依此类推。当完成所有7个选择时,记录迄今为止最好的成本。让递归返回一步并做出不同的选择。您还需要一组布尔值来标记已经选择的作业,以避免重复。

我将实际代码保留给您,因为它是一个练习。