流水作业调度

int FlowShop(int n, int a, int b, int c) {
    class Jobtype {
    public:
        int key, index;
        bool job;

        int operator <= (Jobtype a) const {
            return key <= a.key;
        }
    };
    Jobtype *d = new Jobtype[n];
    for (int i = 0; i < n; i++) {
        d[i].key = a[i] > b[i] ? b[i] : a[i];
        d[i].job = a[i] <= b[i];
        d[i].index = i;
    }
    std::sort(d, d + n);
    int j = 0, k = n - 1;
    for (int i = 0; i < n; i++) {
        if (d[i].job) {
            c[j++] = d[i].index;
        } else {
            c[k--] = d[i].index;
        }
    }
    j = a[c[0]];
    k = j + b[c[0]];
    for (int i = 1; i < n; i++) {
        j += a[c[i]];
        k = j > k ? j + b[c[i]] : k + b[c[i]];
    }
    delete[] d;
    return k;
}

最后更新: 2024年1月2日 21:37:12
创建日期: 2024年1月2日 19:47:42
回到页面顶部