Pagini recente » Cod sursa (job #639180) | Cod sursa (job #2475711) | Cod sursa (job #2507231) | Cod sursa (job #1090978) | Cod sursa (job #36886)
Cod sursa(job #36886)
type vector=array[1..15] of 0..1;
var f,g:text;
i,j,n,m,r,c,k:integer;
a:array[1..521,1..521] of integer;
ok:boolean;
x:vector;
max,q:longint;
v:array[1..521] of longint;
procedure quick(s,d:integer);
var a,b,ia:integer;
t:longint;
begin a:=s;
b:=d;
repeat
while v[a]<v[b] do b:=b-1;
t:=v[a]; v[a]:=v[b]; v[b]:=t;
a:=a+1; ia:=1;
if a<b then
begin
while v[a]<v[b] do a:=a+1;
t:=v[a]; v[a]:=v[b]; v[b]:=t;
b:=b-1; ia:=0;
end;
until b<=a;
if s<a-ia then quick(s,a-ia);
if a-ia+1<d then quick(a-ia+1,d);
end;
procedure adauga(var x:vector);
var j:integer;
begin
if x[n]=0 then x[n]:=1
else
begin
j:=n;
while x[j]=1 do
begin
x[j]:=0;
dec(j);
end;
x[j]:=1;
end;
end;
begin
assign(f,'elimin.in');
reset(f);
assign(g,'elimin.out');
rewrite(g);
readln(f,n,m,r,c);
if (r=0)and(c=0) then
begin
max:=0;
for i:=1 to n do begin for j:=1 to m do begin read(f,k); max:=max+k; end; readln(f); end;
writeln(g,max);
end else
begin
if m<=15 then
begin
k:=n;
n:=m;
m:=k;
k:=c;
c:=r;
r:=k;
end;
fillchar(v,sizeof(v),0);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(f,a[i,j]);
v[j]:=v[j]+a[i,j];
end;
readln(f);
end;
close(f);
max:=0;
for i:=1 to n do x[i]:=0;
ok:=true;
while ok do
begin
q:=0;
adauga(x);
q:=0; for i:=1 to n do if x[i]=1 then inc(q);
if q=n then ok:=false
else if q=r then
begin
for i:=1 to n do
if x[i]=1 then
begin
for j:=1 to m do v[j]:=v[j]-a[i,j];
end;
quick(1,m);
q:=0;
for i:=c+1 to m do q:=q+v[i];
if q>max then max:=q;
end;
end;
writeln(g,max); end;
close(g);
end.