我有这个问题要做:
使用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类,我完全感到困惑。我甚至不知道从哪里开始,特别是因为我需要使用递归。请帮忙!
答案 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个选择时,记录迄今为止最好的成本。让递归返回一步并做出不同的选择。您还需要一组布尔值来标记已经选择的作业,以避免重复。
我将实际代码保留给您,因为它是一个练习。