您的位置:首页 > 其它

动态规划之——装配线调度

2013-04-23 11:11 225 查看
在《算法导论》第二版中,P193,介绍了动态规划的装配线调度的问题,这个问题咋一看貌似很难,其实只要认真的读,发现它真是一个说明动态规划的好例子,而且题目的难度很低,非常好理解!题目我就不想说了,看书理解的更透彻。这篇博客主要是贴代码,将其实现了。这里我把进入和输出装配线的值都直接加到f数组中,简化计算。

#include "stdafx.h"
#include <iostream>
using namespace std;

const int S1[6] = { 9, 9, 3, 4, 8, 7 };
const int S2[6] = { 12, 5, 6, 4, 5, 9 };

const int cost_1To2[5] = { 2, 3, 1, 3, 4 };
const int cost_2To1[5] = { 2, 1, 2, 2, 1 };

void printArray( int arr[], int length )
{
for ( int i = 0; i < length; ++i )
{
cout<<arr[i]<<" ";
}
cout<<endl;
}

int _tmain(int argc, _TCHAR *argv[])
{
int f1[6] = {0};
int f2[6] = {0};

int L1[5]= {0};
int L2[5] = {0};

f1[0] = 9;
f2[0] = 12;

for ( int i = 1; i < 6; ++i )
{
if ( f1[ i -1 ] + S1[i] <= f2[ i - 1] + S1[i] + cost_2To1[ i - 1] )
{
f1[i] = f1[ i -1 ] + S1[i];
L1[ i - 1 ] = 1;
}
else
{
f1[i] = f2[ i - 1] + S1[i] + cost_2To1[ i - 1];
L1[ i - 1 ] = 2;
}

if ( f2[ i - 1] + S2[i] <= f1[i-1] + S2[i] + cost_1To2[i-1])
{
f2[i] = f2[i-1] + S2[i];
L2[i-1] = 2;
}
else
{
f2[i] = f1[i-1] + S2[i] + cost_1To2[i-1];
L2[i-1] = 1;
}
} //for

cout<<"f1的数组内容为: ";
printArray( f1, 6 );
cout<<"f2的数组内容为: ";
printArray( f2, 6 );
cout<<"L1的数组内容为: ";
printArray( L1, 5 );
cout<<"L2的数组内容为: ";
printArray( L2, 5);

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息