Pagini recente » Cod sursa (job #1866843) | Cod sursa (job #2795326) | Cod sursa (job #2888535) | Cod sursa (job #2799407) | Cod sursa (job #3344763)
#include <bits/stdc++.h>
using namespace std;
int n, m, r, c, mx = INT_MIN;
int a[7300][7300];
int rows[7300];
bool visited[7300];
int colsum[7200];
void bkt(int k) {
if (k == r + 1) {
memset(colsum, 0, sizeof(colsum));
for (int i = 1; i <= n; ++i) {
if (!visited[i])
for (int j = 1; j <= m; ++j) {
colsum[j] += a[i][j];
}
//else cout << "nu am vizitat randul " << i << '\n';
}
sort(colsum + 1, colsum + 1 + m);
int s = 0;
for (int i = m; i > c; --i) {
s += colsum[i];
}
mx = max(mx, s);
//cout << s << '\n';
return;
}
for (int i = rows[k - 1] + 1; i <= n; ++i) {
if (!visited[i]) {
visited[i] = 1;
rows[k] = i;
bkt(k + 1);
visited[i] = 0;
}
}
}
int main() {
freopen("elimin.in", "r", stdin);
freopen("elimin.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> r >> c;
if (n <= m) {
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
cin >> a[i][j];
}
else {
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
cin >> a[j][i];
swap(n, m); swap(c, r);
}
bkt(1);
cout << mx;
return 0;
}