Pagini recente » Cod sursa (job #2227409) | Cod sursa (job #161641) | Cod sursa (job #1797566) | Cod sursa (job #664554) | Cod sursa (job #1165445)
#include <cstdio>
#include <algorithm>
using namespace std;
int Mat[7300][17],i,j,n,m,St;
int R,C,v[7300],l,nrbiti[33000];
bool q[105];
int RezFinal;
int main()
{
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d %d %d %d",&n,&m,&R,&C);
if (m<n)
{
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{scanf("%d",&Mat[i][j]); St+=Mat[i][j];}
}
else
{
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{scanf("%d",&Mat[j][i]); St+=Mat[j][i];}
swap(n,m); swap(R,C);
}
int nrsub=(1<<m);
for (i=1;i<nrsub;i++)
{
nrbiti[i]=nrbiti[i>>1];
if (i&1) ++nrbiti[i];
}
for (i=0;i<nrsub;i++)
{
if (nrbiti[i]==C)
{
j=i; l=0; while(j){if (j&1) q[++l]=1; else q[++l]=0; j>>=1;}
int S=St;
for (j=1;j<=m;j++)
if (q[j])
for (register int x=1;x<=n;x++)
S-=Mat[x][j];
for (j=1;j<=n;j++)
{v[j]=0;
for (register int x=1;x<=m;x++)
v[j]+=Mat[j][x]*(!q[x]);}
sort(v+1,v+n+1);
for (j=1;j<=R;j++)
S-=v[j];
if (S>RezFinal) RezFinal=S;
}
}
printf("%d",RezFinal);
return 0;
}