问题描述 | 用2 台处理机A和B处理n个作业。设第i个作业交给机器A处理时需要时间ai ,若 | |
编程任务: | 对于给定的2 台处理机A和B 处理n 个作业,找出一个最优调度方案,使2 台机器处 | |
数据输入: | 第1 行是1 个正整数n, 表示要处理n 个作业。 | |
结果输出: | 将计算出的最短处理时间输出。 | |
样例: | 6 | 15 |
核心思想 | f[i,j]=min{f[i-1,j]+b[i],f[i-1,j-a[i]}前i个任务A机器做功j时间,B机器做功最短时间。 ans=min{f[n,i]+i} |
var
f,a,b:array[0..10000]of longint;
tot,ans,i,j,n:longint;
function min(a,b:longint):longint;
begin
ifa>b then exit(b);
exit(a);
end;
function max(a,b:longint):longint;
begin
ifa>b then exit(a);
exit(b);
end;
begin
assign(input,'p30.in');reset(input);
assign(output,'p30.out');rewrite(output);
readln(n);
fori:=1 to n do
begin
read(a[i]);
inc(tot,a[i]);
end;
readln;
fori:=1 to n do read(b[i]);
readln;
fori:=1 to n do
forj:=tot downto 0 do
ifj<a[i] then f[j]:=f[j]+b[i]
else f[j]:=min(f[j-a[i]],f[j]+b[i]);
ans:=maxlongint;
fori:=0 to tot do
ans:=min(ans,max(i,f[i]));
writeln(ans);
close(input);close(output);
end.
题目来源:《
算法设计与分析》第三章动态规划