动态规划之——装配线调度
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);
}
#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);
}
![](http://img.my.csdn.net/uploads/201304/23/1366686968_2956.png)
相关文章推荐
- 动态规划之装配线调度理解
- 动态规划之 装配线调度问题
- 动态规划 - 装配线调度问题
- 动态规划----装配线调度
- 动态规划--装配线调度问题
- 动态规划之装配线调度
- 动态规划 - 装配线调度问题
- 动态规划: 装配线调度问题 (算法导…
- 流水线调度最优问题(装配线调度问题)动态规划 O(n)时间(线性时间)C++实现
- 动态规划—装配线调度
- 动态规划之装配线调度
- 动态规划-装配线调度
- 动态规划-装配线调度
- 第十五章动态规划之“装配线调度”
- 动态规划-装配线调度
- 动态规划之装配线调度问题
- 动态规划-装配线调度
- 动态规划--装配线调度问题
- 动态规划——装配线调度问题
- 动态规划——装配线调度