• 最佳调度问题pascal程序


    Description

    假设有n个任务由k个并行工作的机器来完成。完成任务i需要的时间为Ti。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。
    算法设计:对任意给定的整数n和k,以及完成任务i需要的时间为Ti,i=1,2,3……n。计算完成这n个任务的最佳调度。

    Input

    第一行有2个正整数n和k。第2行的n个正整数是完成n个任务需要的时间。

    Output

    将计算的完成全部任务的最早时间

    Sample Input

    7 3
    2 14 4 16 6 5 3

    Sample Output

    17



    这题我是用搜索来做的

    这题有点像接水问题


    var
    n,k,tj,i:longint;
    b,t:array[0..10000]of longint;
    procedure kp(l,r:longint);
    var
    i,j,mid:longint;
    begin
        if l>=r then exit;
        i:=l;j:=r;mid:=t[(l+r)div 2];
        repeat
             while t[i]>mid do inc(i);
             while t[j]<mid do dec(j);
             if i<=j then
             begin
                 t[0]:=t[i];t[i]:=t[j];t[j]:=t[0];
                 inc(i);dec(j);
             end;
        until i>j;
        kp(l,j);
        kp(i,r);
    end;
    procedure search(dep,time:longint);
    var
    i:longint;
    begin
        if dep>n then
        if time<tj then
        begin
            tj:=time;
            exit;
        end;
        if time>=tj then exit;
        for i:=1 to k do
        begin
            b[i]:=b[i]+t[dep];
            if b[i]>time then search(dep+1,b[i]) else search(dep+1,time);
            b[i]:=b[i]-t[dep];
        end;
    end;
    begin
        readln(n,k);tj:=10000;
        fillchar(t,sizeof(t),0);
        for i:=1 to n do
        read(t[i]);
        kp(1,n);
        fillchar(b,sizeof(b),0);
        search(1,0);
        write(tj);
    end.

  • 相关阅读:
    HDU 3033 I love sneakers!
    HDU 1712 ACboy needs your help
    FZU 1608 Huge Mission
    HDU 3394 Railway
    【MySQL】20个经典面试题,全部答对月薪10k+
    mysql故障解决笔记
    mysql 索引类型
    linux禁用锁定和解除解锁用户账号的方法
    Linux服务器制定mysql数据库备份的计划任务
    网站服务器安全防范小知识
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500239.html
Copyright © 2020-2023  润新知