搜索与回溯 最佳调度问题

SSL 2287
题目大意
给出n个待做的工作
给出k,可以并行使用的机器
求最小做完n项工作
(DFS)

var
  n,k,min:longint;
  a,b:array[0..1000]of longint;
procedure init;
var
  i,j:longint;
begin
  readln(n,k);
  for i:=1 to n do
   read(a[i]);
  for i:=1 to n-1 do
   for j:=i+1 to n do
    if a[i]then
     begin
       a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
     end;
  min:=maxlongint;
end;

procedure search(dep,max:longint);
var
  i:longint;
begin
  if dep>n then begin if min>max then min:=max; exit; end;
  if max>=min then exit;
  for i:=1 to k do
   begin
     inc(b[i],a[dep]);
     if b[i]>max then search(dep+1,b[i])
      else search(dep+1,max);
     dec(b[i],a[dep]);
   end;
end;

begin
  init;
  search(1,0);
  writeln(min);
end.

题解,不想说什么。
很简单,暴力搜索(深搜)
每次都给没有做过的工作放入一个机器里。

就这么简单
傻X题
向幂伟致敬!
http://blog.csdn.net/qq_33229466/article/details/50646919

你可能感兴趣的:(搜索与回溯 最佳调度问题)