Pagini recente » Cod sursa (job #2983784) | Cod sursa (job #466728) | Cod sursa (job #2009057) | Cod sursa (job #2271540) | Cod sursa (job #1072392)
#include<cstdio>
#include<algorithm>
using namespace std;
int M,n,R,C,S,x,Max;
int A[10000][10000],v[10000],L[10000],c[10000],aux1[10000],e[10000];
void back(int k)
{
int i,j;
if(k==R+1)
{
for(i=1;i<=n;++i)
{
aux1[i]=c[i];
for(j=1;j<=M;++j)
{
if(e[j])
aux1[i]-=A[j][i];
}
}
sort(aux1+1,aux1+n+1);
x=S;
for(i=1;i<=C;++i)
{
x-=aux1[i];
}
if (x>Max) {
Max=x;
}
}
else
{
for(int ii=v[k-1]+1;ii<=M;++ii)
{
if(!e[ii])
{
v[k]=ii;
e[ii]=1;
S-=L[ii];
back(k+1);
e[ii]=0;
S+=L[ii];
}
}
}
}
int main()
{
freopen("elimin.in","r",stdin);freopen("elimin.out","w",stdout);
int aux,i,j;
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];
L[i]+=A[i][j];
c[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];
L[n-j+1]+=A[n-j+1][i];
c[i]+=A[n-j+1][i];
}
}
aux=M;
M=n;
n=aux;
aux=C;
C=R;
R=aux;
}
back(1);
printf("%d",Max);
return 0;
}