Pagini recente » Cod sursa (job #780470) | Cod sursa (job #276487) | Istoria paginii admin/runda/abcdefg.. | Cod sursa (job #654526) | Cod sursa (job #2074564)
#include <bits/stdc++.h>
#define Nmax 8192
#define DIM 70000
using namespace std;
char buffer[DIM];
int poz=DIM-1;
void read(int &x)
{
x=0;
while(!isdigit(buffer[poz]))
if(++poz==DIM)
{
poz=0;
fread(buffer,1,DIM,stdin);
}
while(isdigit(buffer[poz]))
{
x=x*10+buffer[poz]-'0';
if(++poz==DIM)
{
poz=0;
fread(buffer,1,DIM,stdin);
}
}
}
int a[20][Nmax];
int sum[Nmax];
int val[Nmax];
int main()
{
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
int n,m,R,C;
read(n);
read(m);
read(R);
read(C);
if(n>m)
{
swap(n,m);
swap(R,C);
for(int j=1;j<=m;j++)
for(int i=1;i<=n;i++)
read(a[i][j]);
}
else
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
read(a[i][j]);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
sum[j]+=a[i][j];
int nr,S,ans=-INT_MAX;
for(int i=0;i<(1<<n);i++)
{
nr=0;
for(int j=0;(1<<j)<=i;j++)
if((1<<j)&i) nr++;
if(nr!=R) continue;
for(int j=1;j<=m;j++)
val[j]=sum[j];
for(int j=0;(1<<j)<=i;j++)
if((1<<j)&i)
for(int k=1;k<=m;k++)
val[k]-=a[j+1][k];
sort(val+1,val+m+1);
S=0;
for(int j=C+1;j<=m;j++)
S+=val[j];
ans=max(ans,S);
}
printf("%d",ans);
return 0;
}