雇佣计划问题
pascal吧
全部回复
仅看楼主
level 11
惜丿夕颜 楼主
9、雇佣问题:
一个项目管理人想确定每个月需要的工人数。他知道每个月至少需要多少工人,当他雇佣或解雇一个工人的时候,他将会多花一些钱。每一个工人一旦被雇佣,他就将得到薪水(尽管他可能没有工作!!!)经理知道雇佣、解雇一个工人的钱以及工人的薪水。那么,经理需要面对这样的问题:怎么雇佣和解雇工人,才能是使总付出最少?
输入:输入数据包括多组测试数据。每一组数据包括3行。第一行是月数<=12。第二行包括雇佣工人的钱、薪水和解雇的钱。第三行包括多个数,表示每个月需要工人的个数。月数为“0”表示数据结束。
输出:一行,最小花费。
2014年03月22日 02点03分 1
level 11
惜丿夕颜 楼主
const c=100;
var a:array[0..c] of longint;
n,x,y,z,s:longint;
procedure ReadData;
var i:integer;
begin
readln(n);
readln(x,y,z);
for i:=1 to n do
read(a[i]);
end;
procedure Main;
var i,r,s1,s2:longint;
begin
r:=a[1];
s:=r*(x+y);
for i:=2 to n do
begin
if a[i]>r then begin inc(s,(a[i]-r)*x); r:=a[i]; end;
if a[i]<r then
begin
s1:=r*y;
s2:=a[i]*y+(r-a[i])*z;
if s1>s2 then begin inc(s,(r-a[i])*z); r:=a[i]; end;
if s1=s2 then
if a[i+1]<a[i] then begin inc(s,(r-a[i])*z); r:=a[i]; end;
end;
inc(s,r*y);
end;
end;
BEGIN
assign(input,'hire.in');
assign(output,'hire.out');
reset(input);
rewrite(output);
ReadData;
Main;
writeln(s);
close(input);
close(output);
END.
2014年03月22日 02点03分 2
level 11
惜丿夕颜 楼主
这个程序哪里有错
2014年03月22日 02点03分 3
level 11
贪心TAT
2014年03月24日 10点03分 4
1