Pagini recente » Cod sursa (job #692441) | Cod sursa (job #1573964) | Cod sursa (job #2401665) | Cod sursa (job #2146680) | Cod sursa (job #1409162)
#include <cstdio>
#include <set>
#include <algorithm>
#define Nmax 4000
#define Mmax 20
using namespace std;
int n , m , l , c , i , j , I , J;
int A[Nmax][Mmax] , sum[Nmax];
set < int > S;
int solve()
{
int i , j , nr , summ , f;
for (int x = 0; x < (1 << m); ++x)
{
for (nr = 0 , j = 0; j < m; ++j)
nr += (x >> j & 1);
if (nr != c) continue;
for (f = 0 , j = 0; j < m; ++j)
if (x >> j & 1);
else
{
for (f = f + 1 , i = 1; i <= n; ++i)
sum[i] = sum[i] * (f != 1) + A[i][j+1];
}
sort(sum + 1 , sum + n + 1);
for (summ = 0 , i = l + 1; i <= n; ++i)
summ += sum[i];
S.insert((-1) * summ);
}
return (*S.begin() * (-1));
}
int main()
{
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d %d %d %d", &n, &m, &l, &c);
for (i = 1; i <= n; ++i)
for (j = 1; j <= m; ++j)
{
if (n < m) I = j , J = i; else I = i , J = j;
scanf("%d", &A[I][J]);
}
if (n < m) swap(n , m) , swap(l , c);
printf("%d\n", solve());
return 0;
}