Pagini recente » Cod sursa (job #272776) | Cod sursa (job #1528938) | Cod sursa (job #1650803) | Cod sursa (job #563341) | Cod sursa (job #9061)
Cod sursa(job #9061)
#include <stdio.h>
long a[128][7300];
long s[7300];
void qsort(long st, long dr)
{
register long i, j, aux, sc;
i=st;j=dr;
sc=s[(st+dr)>>1];
do{
while(s[i]<sc)
++i;
while(s[j]>sc)
--j;
if(i<=j)
{
aux=s[i];
s[i]=s[j];
s[j]=aux;
++i;--j;
}
}while((i<=j));
if(i<dr)qsort(i,dr);
if(j>st)qsort(st,j);
}
int main()
{
register long i, j, k, v[128], n, m, nr1,R,C;
register long long suma, max=0;
max=-1;
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%ld%ld%ld%ld", &m, &n,&R,&C);
if(m>n)
{
k=m;
m=n;
n=k;
k=R;
R=C;
C=k;
}
for(i=1;i<=m;++i)
v[i]=0;
for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
scanf("%ld",&a[i][j]);
v[1]=-1;
k=1;
nr1=0;
while(k)
{
if(++v[k]==1)
++nr1;
if(v[k]==2 || nr1>R)
{
--k;
--nr1;
}
else
if(k==m && nr1==R)
{
for(i=1;i<=n;++i) s[i]=0;
for(i=1;i<=m;++i)
if(v[i]==0) for(j=1;j<=n;++j)
s[j]+=a[i][j];
qsort(1,n);
suma=0;
for(i=C+1;i<=n;++i)
suma+=s[i];
if(suma>max)
max=suma;
}
else
v[++k]=-1;
if(k>m)
k=m;
}
printf("%lld\n",max);
return 0;
}