Pagini recente » Istoria paginii utilizator/upt_lupu_kiss_buliga | Cod sursa (job #3150795) | Cod sursa (job #1030728) | Cod sursa (job #2021533) | Cod sursa (job #2765714)
#include <fstream>
#include <algorithm>
#include <queue>
using namespace std;
short a[16][7295];
short n, m, R, C;
void read() {
int i, j;
ifstream f("elimin.in");
f >> n >> m >> R >> C;
if (n > m) {
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
f >> a[j][i];
swap(n, m), swap(R, C);
}
else {
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
f >> a[i][j];
}
f.close();
}
int Maxsum;
short comb[16];
int v[7295];
priority_queue<int, vector<int>, greater<int>> Q;
void solutie() {
int i, sum = 0, j, aux;
bool elim[16] = {0};
for (i = 1; i <= R; i++)
elim[comb[i]] = 1;
for (j = 1; j <= m; j++) {
aux = 0;
for (i = 1; i <= n; i++)
if (!elim[i]) {
aux += a[i][j];
sum += a[i][j];
}
Q.push(aux);
}
for (i = 1; i <= C; i++)
sum -= Q.top(), Q.pop();
Maxsum = (sum > Maxsum ? sum : Maxsum);
}
void back(int k) {
for (int i = comb[k - 1] + 1; i <= n + k - R; i++) {
comb[k] = i;
if (k < R)
back(k + 1);
else solutie();
}
}
void output() {
ofstream g("elimin.out");
g << Maxsum;
g.close();
}
int main() {
read();
back(1);
output();
return 0;
}