Cod sursa(job #402553)
# include <fstream.h>
ifstream f ("elimin.in");
ofstream g ("elimin.out");
int a[100][100],b[1000],i,j,aux,smax=-100000000,q,w,n,m,s[1000],sf,z,k,kk;
void poz (int i,int j)
{
int ii=i,jj=j,ss=1,ss2=0;
while (ii<jj)
{
if (s[ii]>s[jj])
{
aux=s[ii];
s[ii]=s[jj];
s[jj]=aux;
if (ss==1)
{
ss=0;
ss2=-1;
}
else
{
ss=1;
ss2=0;
}
}
ii=ii+ss;
jj=jj+ss2;
kk=ii;
}
}
void ord (int i,int j)
{
if (i<j)
{
poz (i,j);
ord (1,kk-1);
ord (kk+1,m);
}
}
void xyz ()
{int i,j;
sf=0;
for (k=1;k<=m;k++)
{z=0;
for (j=1;j<=n;j++)
z=z+a[j][k];
for (j=1;j<=q;j++)
z=z-a[b[j]][k];
sf=sf+z;
s[k]=z;
}
ord (1,m);
for (i=1;i<=w;i++)
sf=sf-s[i];
if (smax<sf)
smax=sf;
}
void back (int i)
{
int val;
for (val=b[i-1]+1;val<=n;val++)
{
b[i]=val;
if (i==q)
xyz ();
if (i<q)
back (i+1);
}
}
int main ()
{
f>>n>>m>>q>>w;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
f>>a[i][j];
back (1);
g<<smax;
}