Pagini recente » Cod sursa (job #2850526) | Cod sursa (job #1507353) | Cod sursa (job #2469355) | Cod sursa (job #2415455) | Cod sursa (job #2448104)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
int a[530][20];
int sume[530];
int n, m, r, c, maxim = 0;
void citireNormal()
{
for(int i = 0; i<n; i++)
{
for(int j = 0; j<m; j++)
{
scanf("%d", &a[i][j]);
}
}
}
void citireInvers()
{
for(int i = 0; i<n; i++)
{
for(int j = 0; j<m; j++)
{
scanf("%d", &a[j][i]);
}
}
}
void afisare()
{
for(int i = 0; i<n; i++)
{
for(int j = 0; j<m; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
}
void calcSumeSec(int v)
{
int sCurr = 0;
for(int j = 0; j<m; j++)
{
if(((1<<j) & v) == (1<<j))
{
for(int i = 0; i<n; i++)
{
sume[i] += a[i][j];
}
}
}
sort(sume, sume+n);
for(int i = r; i<n; i++)
{
sCurr+=sume[i];
}
maxim = max(sCurr, maxim);
memset(sume, 0, sizeof(sume));
}
void rez()
{
scanf("%d %d %d %d", &n, &m, &r, &c);
if(n >= m)
{
citireNormal();
}
else
{
citireInvers();
swap(n, m);
swap(r, c);
}
int nr = (1<<m);
int unu, sCurr, aux;
for(int v = 0; v<nr; v++)
{
unu = 0;
aux = v;
while(aux)
{
unu++;
aux -= (aux&-aux);
}
if(unu == m-c)
{
calcSumeSec(v);
}
}
printf("%d", maxim);
}
int main()
{
freopen("elimin.in", "r", stdin);
freopen("elimin.out", "w", stdout);
rez();
return 0;
}