流水线调度问题实现(动态规划基础---------问题取自算法导论)





#include <iostream>

using namespace std;

#define MAXN 100
#define LINE 2  

int factory[LINE][MAXN][LINE];	     //记录流水线上每个工作站的装配时间和转换至另一条流水线的开销
int cost[LINE][MAXN];                //记录开销动态规划时的最优子问题
int record[LINE][MAXN];		     //记录选择的流水线

int main()
{
    int n, e1, e2;
    cin >> n;
    cin >> e1 >> e2;;
    cout << "please the cost of each station, i set as station line,j as station num" << endl;
    if(0 == n)
            return 0;
    for(int i = 0; i < LINE; i++){
        cout << "please input line:" << i << "\n";
        for(int j = 0; j < n; j++){
              cin >> factory[i][j][0];          //make cost
                cin >> factory[i][j][1];        //line change cost
        }
    }        
    for(int i = 0; i < LINE; i++){
        for(int j = 0; j < n; j++)
              cout << "(local cost:" << factory[i][j][0] << " and change cost:" << factory[i][j][1] << ")\n";
        cout << "\n";
    }
    
    cost[0][0] = factory[0][0][0] + e1;
    cost[1][0] = factory[1][0][0] + e2;

    record[0][0] = 0;
    record[1][0] = 1;

    for(int i = 1; i < n ; i++){
            if(cost[0][i - 1] <= cost[1][i - 1] + factory[1][i - 1][1]){
                      cost[0][i] = cost[0][i - 1] + factory[0][i][0]; 
                      record[0][i] = 0;
            }else{
                      cost[0][i] = cost[1][i - 1] + factory[0][i][0] + factory[1][i - 1][1]; 
                      record[0][i] = 1;
            }

            if(cost[1][i - 1] <= cost[0][i - 1] + factory[0][i - 1][1]){
                      cost[1][i] = cost[1][i - 1] + factory[1][i][0]; 
                      record[1][i] = 1;
            }else{
                      cost[1][i] = cost[0][i - 1] + factory[1][i][0] + factory[0][i - 1][1]; 
                      record[1][i] = 0;
            }
    }     
            int line = (cost[0][n - 1] + factory[0][n - 1][1] <= cost[1][n - 1] + factory[1][n-1][1]) ? 0 : 1; 
            for(int i = n - 1; i >= 0; i--){
                      cout << "in line "<< line << "station " << i  << "\n";   
                      line = record[line][i];
            
            }

return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值