posts - 36,  comments - 3,  trackbacks - 0

    装配一辆汽车,有两条装配线分别有n个装配点,每条装配线在进出所花时间为e[i],x[i] (i=0,1),
 每个装配点所需时间a[i][j](i=0,1;j=0,1,...,n-1),从一条装配线i的第j个装配点到另一条装配线的第j+1个装配点所需时间t[i][j]。

 首先应找到最佳线路的递归解为:
f1[j]=min(f1[j-1]+a1[j],f2[j-1]+t2[j-1]+a1[j])
f2[j]=min(f2[j-1]+a2[j],f1[j-1]+t1[j-1]+a2[j])



#include<stdio..h>
//装配线
 int fastWay(int a[][6],int t[][5],int e[],int x[],int n)//hanshubianliang
 {
   int f1[6];//=new int[n];
   int f2[6];//=new int[n];
   int l1[6];//=new int[n];
   int l2[6];//=new int[n];
   int fmax=0;
   int l;
   int i,j;
   f1[0]=a[0][0]+e[0];//guihua ;
   f2[0]=a[1][0]+e[1];
   for(j=1;j<n;j++)//DP;
  
    {

           if(f1[j-1]+a[0][j]>=f2[j-1]+t[1][j-1]+a[0][j])

           {

                f1[j]=f2[j-1]+t[1][j-1]+a[0][j];

                l1[j]=2;

           }

           else

           {

        f1[j]=f1[j-1]+a[0][j];

        l1[j]=1;

       }

       if(f2[j-1]+a[1][j]>=f1[j-1]+t[0][j-1]+a[1][j])

       {

            f2[j]=f1[j-1]+t[0][j-1]+a[1][j];

            l2[j]=1;

       }

       else

       {

        f2[j]=f2[j-1]+a[1][j];

        l2[j]=2;

       }

  }
 
     if(f1[n-1]+x[0]>=f2[n-1]+x[1])

      {

           fmax=f2[n-1]+x[1];

           l=2;//JILU SUOXUANDE XIANG L1||L2

      }

      else

     {
   
        fmax=f1[n-1]+x[0];

           l=1;

      }

  for(i=1;i<n;i++)
 
     {

           if(l=1)

       {

        printf("%d ",l1[i]);

    }

   else if(l=2)
   {
   
     printf("%d ",l2[i]);

       }

  }
   
   return fmax;
 }
int main()
{
 int a[2][6]={7,9,3,4,8,4,8,5,6,4,5,7};
 int t[2][5]={2,3,1,3,4,2,1,2,2,1};
 int x[2]={3,2};
 int e[2]={2,4};
 int n=6;
 int f=fastWay(a,t,e,x,n);
 printf("\n%d\n",f);
 return 0;
}

posted on 2012-07-12 14:55 天YU地___PS,代码人生 阅读(643) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

 一定要好好学习,天天向上!

常用链接

留言簿

随笔分类(8)

随笔档案(35)

文章分类

文章档案(1)

搜索

  •  

最新评论

阅读排行榜

评论排行榜