Pagini recente » Cod sursa (job #2071852) | Cod sursa (job #1142919) | Cod sursa (job #238729) | Cod sursa (job #673453) | Cod sursa (job #7259)
Cod sursa(job #7259)
var s:array[0..20]of integer;
v:array[0..900,0..900]of integer;
x:array[0..900]of integer;
i,j,n,m,r,c,stot,max:longint;
procedure back(k,nr:longint);
var i,j,ss,min,lim:longint;
ok:boolean;
begin
if k=nr then
begin
if nr=r then
begin
ss:=stot;
for i:=1 to n do
x[i]:=v[0,i];
for i:=1 to nr do
for j:=1 to n do
dec(x[j],v[s[i],j]);
for i:=1 to nr do
ss:=ss-v[s[i],0];
for i:=1 to c do
begin
min:=1;
for j:=2 to n do
if x[j]<x[min] then
min:=j;
ss:=ss-x[min];
x[min]:=maxint;
end;
if ss>max then
max:=ss;
end
else
begin
ss:=stot;
for i:=1 to m do
x[i]:=v[i,0];
for i:=1 to nr do
for j:=1 to m do
dec(x[j],v[j,s[i]]);
for i:=1 to nr do
ss:=ss-v[0,s[i]];
for i:=1 to r do
begin
min:=1;
for j:=2 to m do
if x[j]<x[min] then
min:=j;
ss:=ss-x[min];
x[min]:=maxint;
end;
if ss>max then
max:=ss;
end;
end
else
begin
lim:=m;
if nr=c then
lim:=n;
for i:=1 to lim do
begin
s[k+1]:=i;
ok:=true;
for j:=1 to k do
if s[j]=s[k+1] then
ok:=false;
if ok then
back(k+1,nr);
end;
end;
end;
begin
assign(input,'elimin.in');reset(input);
assign(output,'elimin.out');rewrite(output);
readln(m,n,r,c);
for i:=1 to m do
for j:=1 to n do
begin
read(v[i,j]);
inc(v[i,0],v[i,j]);
stot:=stot+v[i,j];
end;
for i:=1 to n do
for j:=1 to m do
inc(v[0,i],v[j,i]);
if r<c then
back(0,r)
else
back(0,c);
writeln(max);
close(input);close(output);
end.