Pagini recente » Cod sursa (job #981557) | Autentificare | Cod sursa (job #712009) | Cod sursa (job #964020) | Cod sursa (job #79736)
Cod sursa(job #79736)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
FILE*f=fopen("elimin.in","r");
FILE*g=fopen("elimin.out","w");
int st[2000],n,m,R,C,a[18][2000], b[18][1600];
long Max=0,s[2000],sum;
void read()
{
int aux,i,j;
fscanf(f,"%d %d %d %d",&n,&m,&R,&C);
if(n<=m) for(i=1;i<=n;++i) for(j=1;j<=m;++j) fscanf(f,"%d",&a[i][j]),sum+=a[i][j],b[i][j]=a[i][j];
if(n>m)
{
for(i=n;i>=1;--i)
for(j=1;j<=m;++j)
fscanf(f,"%d",&a[j][i]),sum+=a[j][i];
aux=n; n=m; m=aux;
aux=R; R=C; C=aux;
}
}
long long stiva(long long n)
{
int p=0,nr=0;
memset(st,0,sizeof(st));
while(n!=0)
{
st[++p]=n&1;
if(n&1==1) nr++;
if(nr>R) return -1;
n=n>>1;
}
return nr;
}
int cmp(const void*a, const void*b)
{
return *(int*)a-*(int*)b;
}
void calcul()
{
int i,j,S=0,p=0;
for(i=1;i<=m;++i)
{
s[i-1]=0;
for(j=1;j<=n;++j)
if(st[j]==0) s[i-1]+=a[j][i];
else S+=a[j][i];
}
qsort(s,m,sizeof(s[0]),cmp);
for(i=0;i<C;++i) S+=s[i];
Max=sum-S>Max?sum-S:Max;
}
void solve()
{
long long i,aa;
aa=1<<n;
for(i=0;i<aa;++i)
{
if(stiva(i)==R)
{ calcul();}
}
fprintf(g,"%ld",Max);
}
int main()
{
read();
solve();
return 0;
}