Pagini recente » Cod sursa (job #390273) | Cod sursa (job #1751957) | Cod sursa (job #1751966) | Cod sursa (job #390234) | Cod sursa (job #16209)
Cod sursa(job #16209)
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define NMAX 31
#define MMAX 9666
using namespace std;
int A[NMAX][MMAX], B[MMAX][NMAX], N, M, R, C, S[MMAX], Ss[MMAX], Max;
int main()
{
int i, j, k, sum, n, num;
freopen("elimin.in", "r", stdin);
scanf("%d %d %d %d", &N, &M, &R, &C);
if (N < M)
{
for (i = 0; i < N; i++)
for (j = 0; j < M; j++) scanf("%d", &A[i][j]), Ss[j] += A[i][j];
n = (1<<N);
for (i = 0; i < n; i++)
{
for (j = 0; j < M; j++) S[j] = Ss[j];
num = 0;
for (j = 0; j < N; j++)
if ( ((i>>j)&1) == 1 ) num++;
if (num == R)
{
for (j = 0; j < N; j++)
if ( ((i>>j)&1) == 1 )
for (k = 0; k < M; k++)
S[k] -= A[j][k];
sort(&S[0], &S[M]);
sum = 0;
for (k = C; k < M; k++) sum += S[k];
if (sum > Max) Max = sum;
}
}
}
else
{
for (i = 0; i < N; i++)
for (j = 0; j < M; j++) scanf("%d", &B[i][j]), Ss[i] += B[i][j];
n = (1<<M);
for (i = 0; i < n; i++)
{
for (j = 0; j < N; j++) S[j] = Ss[j];
num = 0;
for (j = 0; j < M; j++)
if ( ((i>>j)&1) == 1 ) num++;
if (num == C)
{
for (j = 0; j < M; j++)
if ( ((i>>j)&1) == 1 )
for (k = 0; k < N; k++)
S[k] -= B[k][j];
sort(&S[0], &S[N]);
sum = 0;
for (k = R; k < N; k++) sum += S[k];
if (sum > Max) Max = sum;
}
}
}
freopen("elimin.out", "w", stdout);
printf("%d\n", Max);
return 0;
}