Pagini recente » Cod sursa (job #2476268) | Cod sursa (job #2113558) | Cod sursa (job #1668754) | Cod sursa (job #1314743) | Cod sursa (job #2398643)
#include <cstdio>
#include <algorithm>
using namespace std;
int N, M, C, L;
int a[530][20];
long long smax = 0;
int s_col[20], s_l[530];
bool cmp(int a, int b)
{
return a>b;
}
void citire_normala(int N, int M)
{
for(int i=1; i<=N; i++)
for(int j=1; j<=M; j++)
{
scanf("%d", &a[i][j]);
s_col[j] += a[i][j];
s_l[i] += a[i][j];
}
}
void citire_rotated(int N, int M)
{
for(int i=1; i <= N; i++)
for(int j=1;j<=M; j++)
{
scanf("%d", &a[j][i]);
s_col[j] += a[j][i];
s_l[i] += a[j][i];
}
}
void copiaza(int csl[])
{
for(int i=1; i<=N; i++)
csl[i] = s_l[i];
}
void verif(int x)
{
int copie_s_l[530];
copiaza(copie_s_l);
long long s_actual = 0;
int j;
bool ok=0;
for(j=M; j>0 && x; j--, x>>=1)
if((x&1) != 0)
for(int i=1; i<=N; i++)
copie_s_l[i] -= a[i][j];
sort(copie_s_l+1, copie_s_l + N + 1, cmp);
for(int i=1; i<=N-L; i++)
s_actual += copie_s_l[i];
if(s_actual > smax)
smax = s_actual;
}
void generare()
{
int v = (1<<M);
for(int i=0; i<=v; i++)
{
int nr1 = C;
for(int j=1; j <= i; j<<=1)
if((i&j) == 1)
nr1--;
if(nr1 == 0)
verif(i);
}
}
int main() {
freopen("elimin.in", "r", stdin);
freopen("elimin.out", "w", stdout);
scanf("%d %d %d %d", &N, &M, &L, &C);
if(M <= N)
citire_normala(N, M);
else{
citire_rotated(N, M);
swap(N, M);
swap(L, C);
}
generare();
printf("%d", smax);
return 0;
}