Pagini recente » Cod sursa (job #2238408) | Cod sursa (job #1828128) | Cod sursa (job #785895) | Cod sursa (job #2413232) | Cod sursa (job #2307002)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stdlib.h>
using namespace std;
int sMin;
int a[5000][100], v[5000];
int r, c;
int colSum[5000];
int n, m;
void prelucrare(int **a) {
for (int i = 1; i <= n; ++i) {
int pos = 1;
colSum[i] = 0;
for (int j = 1; j <= m; ++j) {
if (v[pos] == j) {
pos ++;
} else {
colSum[i] += a[i][j];
}
}
}
sort(colSum + 1, colSum + n + 1);
int currentSum = 0;
for (int i = 1; i <= r; ++i) {
currentSum += colSum[i];
}
for (int j = 1; j <= c; ++j) {
for (int i = 1; i <= n; ++i) {
currentSum += a[i][v[j]];
}
}
sMin = min (sMin, currentSum);
}
void BK(int k, int **a) {
for (int i = v[k - 1] + 1; i <= m; ++i) {
v[k] = i;
if (k == c) {
prelucrare(a);
} else { BK(k + 1, a); }
}
}
int main() {
ifstream f("elimin.in");
ofstream g("elimin.out");
f >> n >> m >> r >> c;
int b[n + 1][m + 1];
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
f >> b[i][j];
}
}
int **a = (int**) malloc( (max(n, m) + 1) * sizeof(int*));
for (int i = 0; i <= max(n, m); ++i) {
a[i] = (int*) malloc((min(n, m) + 1) * sizeof(int));
}
// generez minim pentru coloane
if (m > n) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
a[j][i] = b[i][j];
}
}
swap(n, m);
swap(r, c);
} else {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
a[i][j] = b[i][j];
}
}
}
sMin = 10000000;
BK(1, a);
int totalSum = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
totalSum = totalSum + a[i][j];
}
}
g << totalSum - sMin;
return 0;
}