Pagini recente » Cod sursa (job #822649) | Cod sursa (job #2936961) | Cod sursa (job #254602) | Cod sursa (job #1643613) | Cod sursa (job #149959)
Cod sursa(job #149959)
#include <stdio.h>
#include <stdlib.h>
int v[7300][16];
int sl[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 y-x;
}
int sumec(int c)
{
int i,j,t,s;
for (i=0; i<m; ++i)
for (sl[i]=0,j=0,t=c; j<n; j++,t=t>>1)
sl[i]+=v[i][j]*(t & 1);
qsort(sl,m,sizeof(sl[0]),cmp);
s=0;
for (i=0; i<m-R; ++i)
s+=sl[i];
return s;
}
void elc()
{
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==n-C)
{
t=sumec(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]);
}
else
{
for (i=0; i<m; i++)
for (j=0; j<n; j++)
fscanf(in,"%d",&v[i][j]);
}
elc();
fprintf(out,"%d\n",max);
fclose(in);
fclose(out);
return 0;
}