zoukankan      html  css  js  c++  java
  • 最佳调度问题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.

  • 相关阅读:
    Java基础——数组复习
    JavaScript 笔记总结
    HTML总结
    css代码添加背景图片常用代码
    Java 并发包之线程池综述
    Java 并发之Concurrent 包综述
    AQS 框架之 Lock 接口
    AQS 框架之 LockSupport 线程阻塞工具类
    JAVA 锁之 Synchronied
    ThreadLocal 线程本地变量
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500239.html
Copyright © 2011-2022 走看看