Pagini recente » Cod sursa (job #1506492) | Cod sursa (job #1616868) | Cod sursa (job #2240372) | Cod sursa (job #2238502) | Cod sursa (job #1314112)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("elimin.in");
ofstream fout ("elimin.out");
const short M = 16, N = 523;
int m, n, a[M][N], em, en, MAX, v[M], total;
void check_sol() {
int sol = total;
int aux[N];
for (int i = 1; i <= n; ++i)
aux[i] = a[0][i];
for (int i = 1; i <= em; ++i)
for (int j = 1; j <= n; ++j) {
aux[j] -= a[v[i]][j];
sol -= a[v[i]][j];
}
sort (aux + 1, aux + n + 1);
for (int i = 1; i <= en; ++i)
sol -= aux[i];
MAX = max(MAX, sol);
}
void back(int k) {
int i = v[k-1] + 1;
for (; i <= m; ++i) {
v[k] = i;
if (k < em)
back(k+1);
else
check_sol();
}
}
int main() {
fin >> m >> n >> em >> en;
if (m > 15 || m > n) {
swap(m, n);
swap(em, en);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j) {
fin >> a[j][i];
a[j][0] += a[j][i];
a[0][i] += a[j][i];
}
}
else {
for (int i = 1; i <= m; ++i)
for (int j = 1; j <= n; ++j) {
fin >> a[i][j];
a[0][j] += a[i][j];
a[i][0] += a[i][j];
}
}
for (int i = 1; i <= m; ++i)
total += a[i][0];
back(1);
fout << MAX;
}