#include <unistd.h>
#include <iostream>
//算法导论PDF194页描述的问题
using namespace std;
inline int min(int a,int b)
{
return a>b?b:a;
}
int a1[6]={7,9,3,4,8,4}; //a1装配线的时间
int a2[6]={8,5,6,4,5,7};//a2时间
int l2[6]={4,2,3,1,3,4}; //进入a2的时间
int l1[6]={2,2,1,2,2,1}; //进入a1的时间
int x1=3; //a1出库时间
int x2=2; //a2出库时间
//返回到装配线currentA的装配点currentP的最短时间
int minf(int currentA,int currentP)
{
if(currentP)
{
if(currentA)
return a2[currentP]+min(minf(0,currentP-1)+l2[currentP],minf(1,currentP-1));
else
return a1[currentP]+min(minf(0,currentP-1),minf(1,currentP-1)+l1[currentP]);
}else
if(currentA)
return l2[0]+a2[0];
else
return l1[0]+a1[0];
}
int main()
{
cout<<min(minf(0,5)+x1,minf(1,5)+x2)<<endl;
return 0;
}