Cod sursa(job #3344763)

Utilizator Alexutu008Ionita Alexandru-Dumitru Alexutu008 Data 5 martie 2026 16:07:46
Problema Elimin Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#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;
}