Pagini recente » Cod sursa (job #567342) | Cod sursa (job #3231867) | Cod sursa (job #1591779) | Cod sursa (job #2369133) | Cod sursa (job #8390)
Cod sursa(job #8390)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 15;
const int MMAX = 7680;
int N, M, R, C;
bool W;
int V;
int A[NMAX][MMAX];
int SMAX;
void read() {
FILE *fin = fopen("elimin.in", "rt");
int i, j;
fscanf(fin, " %d %d %d %d", &N, &M, &R, &C);
if (M < N) W = true;
for (i = 0; i < N; ++i)
for (j = 0; j < M; ++j)
if (W)
fscanf(fin, " %d", &A[j][i]);
else
fscanf(fin, " %d", &A[i][j]);
if (W) swap(N, M), swap(R, C);
fclose(fin);
}
void wipe() {
int T[MMAX];
int i, j, sm;
memset(T, 0, sizeof(T));
for (i = 0; i < N; ++i)
if ((V & (1 << i)) == 0)
for (j = 0; j < M; ++j)
T[j] += A[i][j];
sort(T, T + M);
for (sm = 0, i = C; i < M; ++i)
sm += T[i];
SMAX >?= sm;
}
void select(int k, int last) {
if (k == R)
wipe();
else {
int i, stop;
stop = N - R + 1 + k;
for (i = last + 1; i < stop; ++i) {
V |= 1 << i;
select(k + 1, i);
V &= ~(1 << i);
}
}
}
void write() {
FILE *fout = fopen("elimin.out", "wt");
fprintf(fout, "%d\n", SMAX);
fclose(fout);
}
int main() {
read();
select(0, -1);
write();
return 0;
}