动态规划1——之工厂生产线问题

原创 2011年01月19日 00:18:00

#include <iostream>

#define LINELENGTH 6

 

int line_1[] = {7, 9, 3, 4, 8, 4} ;

int line_2[] = {8, 5, 6, 4, 5, 7} ;

int time_1[] = {2, 2, 1, 2, 2, 1} ;

int time_2[] = {4, 2, 3, 1, 3, 4} ;

int best_line_1[6] = {0} ;

int best_line_2[6] = {0} ;

int short_time_line_1[6] = {0} ;

int short_time_line_2[6] = {0} ;

int time_line1_to_end = 3 ;

int time_line2_to_end = 2 ;

int lastStep ;

int lastTime;

 

void PrintLine(int stationNumber,int line )

{

if ( stationNumber > 0 ) {

if ( line == 2) {

PrintLine(stationNumber -1 , best_line_2[stationNumber - 1]) ;

std::cout<<"Station"<<stationNumber<<" Line 2"<<std::endl;

else {

PrintLine(stationNumber -1 , best_line_1[stationNumber - 1]) ;

std::cout<<"Station"<<stationNumber<<" Line 1"<<std::endl;

}

}

}

void FindBest()

{

best_line_1[0] = 1 ;

best_line_2[0] = 2;

short_time_line_1[0] = time_1[0] + line_1[0];

short_time_line_2[0] = time_2[0] + line_2[0];

for(int i = 1; i < 6 ; i++) {

if (short_time_line_1[i-1] > short_time_line_2[i-1] + time_1[i]) {

short_time_line_1[i] = short_time_line_2[i-1] + time_1[i] + line_1[i];

best_line_1[i] = 2;

}

else {

short_time_line_1[i] = short_time_line_1[i-1] +line_1[i] ;

best_line_1[i] = 1;

}

if (short_time_line_2[i-1] > short_time_line_1[i-1] + time_2[i]) {

short_time_line_2[i] = short_time_line_1[i-1] + time_2[i] + line_2[i] ;

best_line_2[i] = 1;

else {

short_time_line_2[i] = short_time_line_2[i-1] +line_2[i] ;

best_line_2[i] = 2;

}

 

} //end of for

if ( short_time_line_1[LINELENGTH -1] + time_line1_to_end > short_time_line_2[LINELENGTH -1] + time_line2_to_end ) {

lastTime = short_time_line_2[LINELENGTH -1] + time_line2_to_end ;

lastStep = 2 ;

else

{

lastTime = short_time_line_1[LINELENGTH -1] + time_line1_to_end;

lastStep = 1 ;

}

std::cout<<"Total time is "<<lastTime<<std::endl;

if ( lastStep > 1){

PrintLine(LINELENGTH, 2) ;

//std::cout<<"Station"<<LINELENGTH<<"Line 2"<<std::endl;

else {

PrintLine(LINELENGTH, 1) ;

//std::cout<<"Station"<<LINELENGTH<<"Line 1"<<std::endl;

}

 

 

}

 

 

int main()

{

FindBest();

getchar();

return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

编程练习-动态规划(生产线问题)

line_A_cost是生产线A的代价; line_B_cost是生产线B的代价 AB_cost是从生产线A转到生产线B的代价 BA_cost是从生产线B转到生产线A的代价 代码如下: ...

0/1背包问题的动态规划法求解 —— Java 实现

0/1背包问题的动态规划法求解,前人之述备矣,这里所做的工作,不过是自己根据理解实现了一遍,主要目的还是锻炼思维和编程能力,同时,也是为了增进对动态规划法机制的理解和掌握。        值得提...

0019算法笔记——【动态规划】0-1背包问题

1、问题描述:      给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大?      形式化描述:给定c >0...

动态规划法(四)——0/1背包问题

问题描述 有n个物体,重量分别是w0~wn-1,每个物体放入背包后可获得的收益分别为p0~pn-1,背包载重为M,且所有物体要么放要么不放,不能只放一部分。求如何放物体可以得到最高的收益。 问题分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)