您的位置:首页 > 编程语言 > C语言/C++

机器分配(machine.c/cpp/pas)

2011-08-18 20:38 323 查看

机器分配(machine.c/cpp/pas)

某总公司拥有高效生产设备M台,准备分给下属的N 个分公司。各分公司若获得这些设备,可以为总公司提供一定的盈利。问:如何分配这 M 台设备才能使国家得到的盈利最大?求出最大盈利值。

分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总设备数 M。其中M<=100,N<=100。

输入数据:

第一行为两个整数M,N。接下来是一个N×M的矩阵,其中矩阵的第i行的第j列的数Aij表明第i个公司分配j台机器的盈利。所有数据之间用一个空格分隔。

输出数据:

只有一个数据,为总公司分配这M台设备所获得的最大盈利。

样例

输入文件名:machine.in

3 2

1 2 3

2 3 4

输出文件名:machine.out

4

============

0/1背包...

============

var
n,m:longint;
f:array[0..100]of longint;
a:array[1..100,1..100]of longint;
procedure init;
begin
assign(input,'machine.in');
assign(output,'machine.out');
reset(input); rewrite(output);
end;

procedure terminate;
begin
close(input); close(output);
halt;
end;

function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;

procedure main;
var
i,j,k:longint;
begin
readln(m,n);
fillchar(f,sizeof(f),0);

for i:=1 to n do
for j:=1 to m do
read(a[i,j]);

for i:=1 to n do
for k:=m downto 1 do
for j:=1 to k do
begin
f[k]:=max(f[k],f[k-j]+a[i,j]);
end;

writeln(f[m]);
end;

begin
init;
main;
terminate;
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: