Pagini recente » Cod sursa (job #1428849) | Cod sursa (job #2730898) | Cod sursa (job #174782) | Cod sursa (job #2401876) | Cod sursa (job #7773)
Cod sursa(job #7773)
#include<stdio.h>
long sir1[1000],sir2[1000],bur[1000],bur2[1000],n,m,var1,var2,i,j,k,ok,sum,min,s,poz,max;
int bin[400];
int a[1010][1010];
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]);
bur2[i]+=a[i][j];
sir1[i]+=a[i][j];
sir2[j]+=a[i][j];
bur[j]+=a[i][j];
}
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 (sum!=var1) ok=1;
if (!ok)
{
for(j=1;j<=var2;j++)
{
min=1000000000;
for(k=1;k<=m;k++)
if (min>sir2[k]) {min=sir2[k];poz=k;}
sir2[poz]=1000000000;
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<=n;j++)
sir1[j]=bur2[j];
for(j=1;j<=m;j++)
if (bin[j]==0) s+=sir2[j];
else
{
sum++;
if (sum>var2) {ok=1;break;}
for(k=1;k<=n;k++)
sir1[k]-=a[k][j];
}
if (sum!=var2) ok=1;
if (!ok)
{
for(j=1;j<=var1;j++)
{
min=1000000000;
for(k=1;k<=n;k++)
if (min>sir1[k]) {min=sir1[k];poz=k;}
sir1[poz]=1000000000;
s-=min;
}
if (s>max) max=s;
}
}
}
printf("%ld",max);
printf("\n");
fclose(stdout);
}