Pagini recente » Cod sursa (job #3149426) | Cod sursa (job #204365)
Cod sursa(job #204365)
#include<stdio.h>
#define MAX 8007
#define MIN 25
#define pow(a,b) a^=b^=a^=b
int n,m,R,C,s,sum=0;
int a[MIN][MAX],x[MAX],y[MIN];
int v[MIN],sl[MIN],sc[MAX];
int S=0;
void sort(int li, int ls){
int i,j,mij,aux;
i=li;
j=ls;
mij=x[(li+ls)/2];
do{
while(x[i]<mij)
++i;
while(x[j]>mij)
--j;
if (i<=j){
aux=x[i];
x[i]=x[j];
x[j]=aux;
++i;
--j;
}
}while(i<=j);
if(li<j)
sort(li,j);
if(i<ls)
sort(i,ls);
}
void back(int k){
int i,j,l;
if(k==R+1){
for(i=1;i<=n;++i){
x[i]=sc[i];
for(j=1;j<=m;++j){
if(y[j])
x[i]-=a[j][i];
}
}
sort(1,n);
s=S;
for(i=1;i<=C;++i){
s-=x[i];
}
if (s>sum)
sum=s;
}
else{
for(l=v[k-1]+1;l<=m;++l){
if (!y[l]){
v[k]=l;
y[l]=1;
S-=sl[l];
back(k+1);
y[l]=0;
S+=sl[l];
}
}
}
}
int main(){
int i,j;
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d%d%d%d",&m,&n,&R,&C);
if(m<n){
for(i=1;i<=m;++i){
for(j=1;j<=n;++j){
scanf("%d",&a[i][j]);
S+=a[i][j];
sl[i]+=a[i][j];
sc[j]+=a[i][j];
}
}
}
else{
for(i=1;i<=m;++i){
for(j=1;j<=n;++j){
scanf("%d",&a[n-j+1][i]);
S+=a[n-j+1][i];
sl[n-j+1]+=a[n-j+1][i];
sc[i]+=a[n-j+1][i];
}
}
pow(m,n);
pow(C,R);
}
back(1);
printf("%d",sum);
fclose(stdin);
fclose(stdout);
return 0;
}