Cod sursa(job #85380)
Utilizator | Data | 21 septembrie 2007 12:25:41 | |
---|---|---|---|
Problema | Elimin | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.42 kb |
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define NMAX 31
#define MMAX 10666
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;
}