Cod sursa(job #169327)
#include <stdio.h>
#include <algorithm>
using namespace std;
long x[600][600], sum[600], maxim, suma, i, j, n, m, r, c, st[600], aux;
void back(long k, long nr_1)
{
if (k > m) return;
if (nr_1 == c)
{
for (i = 1; i <= n; i ++)
{
sum[i] = 0;
for (int j = 1; j <= m; j ++)
if (!st[j]) sum[i] += x[i][j];
}
sort(sum + 1, sum + n + 1);
suma = 0;
for (i = r + 1; i <= n; i ++) suma += sum[i];
maxim = suma > maxim ? suma : maxim;
}
else
{
st[k] = 1;
back(k + 1, nr_1 + 1);
st[k] = 0;
back(k + 1, nr_1);
}
}
int main()
{
freopen ("elimin.in", "rt", stdin);
freopen ("elimin.out", "wt", stdout);
scanf("%ld %ld %ld %ld", &n, &m, &r, &c);
if (m > n) { i = n; n = m; m = i; i = r; r = c; c = i;}
for (i = 1; i <= n; i ++)
for (j = 1; j <= m; j ++) scanf("%ld", &x[i][j]);
back(1, 0);
printf("%ld\n", maxim);
return 0;
}