Pagini recente » Cod sursa (job #795117) | Cod sursa (job #1525630) | Cod sursa (job #755015) | Cod sursa (job #1220726) | Cod sursa (job #68264)
Cod sursa(job #68264)
#include<stdio.h>
#include<stdlib.h>
#define Nm 7295
#define Mm 16
int M[Nm][Mm],Sl[Nm],Sc[Mm],C[Mm],n,m,r,c,st,sol;
void read()
{
int i,j;
freopen("elimin.in","r",stdin);
scanf("%d%d%d%d",&n,&m,&r,&c);
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
if(m<=n)
scanf("%d",&M[i][j]);
else
scanf("%d",&M[j][i]);
if(m>n)
{
n=n^m;
m=n^m;
n=n^m;
r=r^c;
c=r^c;
r=r^c;
}
}
int cmp(const void *x, const void *y)
{
return *(int*)x-*(int*)y;
}
void update()
{
int S[Nm],i,j,s=st;
for(i=1;i<=n;++i)
S[i]=Sl[i];
for(j=1;j<=c;++j)
s-=Sc[C[j]];
for(i=1;i<=n;++i)
for(j=1;j<=c;++j)
S[i]-=M[i][C[j]];
qsort(S+1,n,sizeof(int),cmp);
for(i=1;i<=r;++i)
s-=S[i];
if(s>sol)
sol=s;
}
void back(int k)
{
if(k==c+1)
update();
else
{
int i;
for(i=C[k-1]+1;i<=m-c+k;++i)
{
C[k]=i;
back(k+1);
}
}
}
void solve()
{
int i,j;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
{
st+=M[i][j];
Sl[i]+=M[i][j];
Sc[j]+=M[i][j];
}
back(1);
}
void write()
{
freopen("elimin.out","w",stdout);
printf("%d\n",sol);
}
int main()
{
read();
solve();
write();
return 0;
}