• 装配线调度问题


     
    装配一辆汽车,有两条装配线分别有n个装配点,每条装配线在进出所花时间为e[i],x[i] (i=0,1),每个装配点所需时间a[i][j](i=0,1;j=1,2,...,n),从一条装配线i的第j个装配点到另一条装配线的第j+1个装配点所需时间t[i][j](i=0,1;j=1,2,...,n-1).
     
    S[1,1]处理完成所经历的时间 = e1 + a[1,1];
    S[1,j] (2<=j<=n)处理完成所经历的时间 =min {S[1,j-1] 处理完成所经历的时间 + a[1,j], S[2,j-1]处理完成所经历的时间 + t[2,j-1] + a[1,j]};
    “出口”处理完成所经历的时间 = min {S[1,n]处理完成所经历的时间 + x[1], S[2,n]处理完成所经历的时间 + x[2]}。
    于是得到以下递推式(截至《算法导论》):
     
    # define MAX n;
    int way[3][MAX + 1];
    
    void FindWay(int e[3], int a[3][MAX + 1], int t[3][MAX + 1], int x[3], int sum[3][MAX + 1])
    {
        int i, j, k;
        sum[1][1] = e[1] + a[1][1];
        sum[2][1] = e[2] + a[2][1];
        for (i = 2; i <= MAX; i++)
        {
            //line 1
            if (sum[1][i - 1] + a[1][i] > sum[2][i - 1] + t[2][i - 1] + a[1][i])
            {
                sum[1][i] = sum[2][i - 1] + t[2][i - 1] + a[1][i];
                way[1][i] = 2;//way[1][i]记录station[1][i]的前一个station所属的line
            }
            else
            {
                sum[1][i] = sum[1][i - 1] + a[1][i];
                way[1][i] = 1;
            }
    
            //line 2
            if (sum[2][i - 1] + a[2][i] > sum[1][i - 1] + t[1][i - 1] + a[2][i])
            {
                sum[2][i] = sum[1][i - 1] + t[1][i - 1] + a[2][i];
                way[2][i] = 1;
            }
            else
            {
                sum[2][i] = sum[2][i - 1] + a[2][i];
                way[2][i] = 2;
            }
        }
        if (sum[1][MAX] + x[1] > sum[2][MAX] + x[2])
        {
            cout << "mintime:" << sum[2][MAX] + x[2] << endl;
            PrintWay(2);
        }
        else
        {
            cout << "mintime:" << sum[1][MAX] + x[1] << endl;
            PrintWay(1);
        }
    }
    
    void PrintWay(int exitline)//反序输出
    {
        int i;
        cout << "line:" << exitline << "-->" << "station:" << MAX << endl;
        for (i = MAX; i >=2 ; i--)
        {
            cout << "line:" << way[exitline][i] << "-->" << "station:" << i - 1 << endl;
            exitline = way[exitline][i];
        }
    }
    View Code
     
  • 相关阅读:
    phpcms 任意位置获取用户头像
    php微信公众帐号发送红包
    nginx解决502错误
    phpcms v9 万能字段使用
    0转换为万
    温故而知新(三)
    温故而知新(一)
    基础积累,来自其他网站的链接
    GCD多线程 在子线程中获取网络图片 在主线程更新
    iOS9 中的一些适配问题
  • 原文地址:https://www.cnblogs.com/mmcmmc/p/3892124.html
Copyright © 2020-2023  润新知