题目难度:★
题目描述:
如上图所示:
给出某样例数据最后的结果为f*=38
这道题目,如果用搜索的方法,则效率为O(2^n),效率极低,由此我们可以想到用动态规划去做。
设f(1,i)表示第一条装配线到第i个装配站时的最优时间,f(2,i)则表示第二条装配线到底i个装配站的最有时间。显然,不管当前到哪一条装配线,对于到第i个装配站只有两种路径(设当前是第一条装配线,以及a(1,i)表示的是第一条装配线的第i个装配零件的时间,t(1,i)表示从第i个装配站到其另一装配线的下一站耗时):
一、通过a(1,j-1)的最快路线,然后直接到达a(1,j)。
二、通过a(2,j-1)的最快路线,然后再从装配线二到达装配线一,然后到达a(1,j)。
而,这两种路径的所对应的值为f(1,j-1)+a(1,j),f(2,j-1)+a(1,j)+t(2,j-1)。
而当是第2条装配线的时候,亦然。
最后答案的最优解f*就等于min(f(1,n)+x1,f(2,n)+x2),而这道题的边界也很好解决,当f(1,i)的i=1的时候f(k,1)=ek+a(k,1)(0<k<3)。
伪代码如下:
最后输出f*即为正确答案,而我们还可以根据l1和l2的值求出最优路径,伪代码如下: