Pagini recente » Cod sursa (job #1777737) | Cod sursa (job #1414190) | Cod sursa (job #2842705) | Cod sursa (job #2725106) | Cod sursa (job #6923)
Cod sursa(job #6923)
#include<stdio.h>
long a[500][500],sir1[500],sir2[500],n,m,k,l,bin[500],i,j,s,auxi[500],bur[500],var1,var2,ok,sum,min,max,bur2[500];
int main()
{
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%ld %ld %ld %ld",&n,&m,&var1,&var2);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%ld",&a[i][j]);
for(i=1;i<=n;i++)
{
s=0;
for(j=1;j<=m;j++)
s+=a[i][j];
sir1[i]=s;
bur2[i]=s;
}
for(j=1;j<=m;j++)
{
s=0;
for(i=1;i<=n;i++)
s+=a[i][j];
bur[j]=s;
}
i=1;
if (n<m)
while (bin[n+1]==0)
{
bin[i]++;
k=i;
while (bin[k]>1) {bin[k]=0;bin[++k]++;}
if (k==n+1) break;
ok=0;
s=0;
sum=0;
for(j=1;j<=m;j++)
sir2[j]=bur[j];
for(j=1;j<=n;j++)
if (bin[j]==0) s+=sir1[j];
else
{
sum++;
if (sum>var1) {ok=1;break;}
for(k=1;k<=m;k++)
sir2[k]-=a[j][k];
}
if (!ok)
{
for(j=1;j<=var2;j++)
{
min=1000000000;
for(k=1;k<=m;k++)
if (min>sir2[k]) min=sir2[k];
s-=min;
}
if (s>max) max=s;
}
}
else
{
while (bin[m+1]==0)
{
bin[i]++;
k=i;
while (bin[k]>1) {bin[k]=0;bin[++k]++;}
if (k==m+1) break;
ok=0;
s=0;
sum=0;
for(j=1;j<=m;j++)
sir1[j]=bur2[j];
for(j=1;j<=n;j++)
if (bin[j]==0) s+=bur[j];
else
{
sum++;
if (sum>var1) {ok=1;break;}
for(k=1;k<=n;k++)
sir1[k]-=a[k][j];
}
if (!ok)
{
for(j=1;j<=var1;j++)
{
min=1000000000;
for(k=1;k<=n;k++)
if (min>sir1[k]) min=sir1[k];
s-=min;
}
if (s>max) max=s;
}
}
}
printf("%ld",max);
printf("\n");
fclose(stdout);
}