Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Diferente pentru utilizator/parket intre reviziile 7 si 6 | Cod sursa (job #149968)
Cod sursa(job #149968)
#include <stdio.h>
#include <stdlib.h>
int v[7300][16];
int sl[7300];
int slt[7300];
int n,m,R=0,C=0,max=0;
int cmp(const void *a, const void *b)
{
int x=*(int*)a,y=*(int*)b;
return x-y;
}
int sumlin(int c)
{
int i,j,t,s=0;
for (i=0; i<m; ++i)
{
slt[i]=sl[i];
for (j=0,t=c; j<n && t; j++,t=t>>1)
slt[i]-=v[i][j]*(t & 1);
s+=slt[i];
}
qsort(slt,m,sizeof(sl[0]),cmp);
for (i=0; i<R; ++i)
s-=slt[i];
return s;
}
void elimc()
{
int t,k=1<<n,l,i;
for (i=0; i<k; ++i)
{
t=i; l=0;
while (t)
{
l+=t&1;
t=t>>1;
}
if (l==C)
{
t=sumlin(i);
if (t>max)
max=t;
}
}
}
int main()
{
FILE *in = fopen("elimin.in","r");
FILE *out = fopen("elimin.out","w");
int i,j,t;
fscanf(in,"%d%d%d%d",&m,&n,&R,&C);
if (n>15)
{
t=n; n=m; m=t;
t=R; R=C; C=t;
for (i=0; i<n; ++i)
for (j=0; j<m; ++j)
{
fscanf(in,"%d",&v[j][i]);
sl[j]+=v[i][j];
}
}
else
{
for (i=0; i<m; ++i)
for (j=0; j<n; ++j)
{
fscanf(in,"%d",&v[i][j]);
sl[i]+=v[i][j];
}
}
elimc();
fprintf(out,"%d\n",max);
fclose(in);
fclose(out);
return 0;
}