《算法导论》之装配线调度问题

题目:


《算法导论》之装配线调度问题_第1张图片
Paste_Image.png
《算法导论》之装配线调度问题_第2张图片
Paste_Image.png
《算法导论》之装配线调度问题_第3张图片
Paste_Image.png
《算法导论》之装配线调度问题_第4张图片
Paste_Image.png

思路:
其实书中给出了具体的解题的思路,这里我做个总结。
首先,不能给题目吓到了,初学者可能会比较困惑,就是这种题,我没有下手的点,但是对于老手来说,这种题就是一个基本的题,不管怎样,这道题,基本上涵盖了DP解题的基本思路。
具体的解法参考书籍,这里仅仅给出我理解的代码。

代码如下:

#include 
#include 
#include 
using namespace std;

vector CalMinPath(const vector & a1,
            const vector & a2,
            const vector & e1,
            const vector & e2,
            int n1Start,
            int n2Start,
            int n1End,
            int n2End)
{
    assert(a1.size() > 0);
    assert(a1.size()==a2.size() && e1.size()==e2.size());

    int N = a1.size();

    vector f1(N, 0);
    vector f2(N, 0);
    vector l1(N, 0);
    vector l2(N, 0);
    vector path;

    f1[0] = n1Start;
    f2[0] = n2Start;
    l1[0] = 1;
    l2[0] = 2;

    for (int i=1; i a1 = {7, 9, 3, 4, 8, 4};
    vector a2 = {8, 5, 6, 4, 5, 7};
    vector e1 = {2, 3, 1, 3, 4, 0};
    vector e2 = {2, 1, 2, 2, 1, 0};
    int n1Start = 2;
    int n2Start = 4;
    int n1End = 3;
    int n2End = 2;

    vector nLuxian = CalMinPath(a1, a2, e1, e2, n1Start, n2Start, n1End, n2End);

    for (int i=0; i

这道题的代码,在一开始我是没有想到的,就是采用自底向上的算法,我一直写代码喜欢使用自顶向下的方式。

你可能感兴趣的:(《算法导论》之装配线调度问题)