Cod sursa(job #3362362)

Utilizator MihaiDraghiciMIHAI DRAGHICI MihaiDraghici Data 7 august 2026 15:59:39
Problema Elimin Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream fin("elimin.in");
ofstream fout("elimin.out");

vector<vector<int>> mat;

int main() {

	int m, n, r, c;
	fin >> m >> n >> r >> c;

	mat.resize(m, vector<int>(n));

	for (int i = 0; i < m; i++){
		for (int j = 0; j < n; j++){
			fin >> mat[i][j];
		}
	}

	long long ans = 0;

	if (m < n){

		for (int mask = 0; mask < (1 << m); mask++){

			if (__builtin_popcount(mask) != m - r){
				continue;
			}

			vector<long long> sumCol(n, 0);

			for (int i = 0; i < m; i++){
				if ((mask & (1 << i)) == 0){
					continue;
				}

				for (int j = 0; j < n; j++){
					sumCol[j] += mat[i][j];
				}
			}

			sort(sumCol.begin(), sumCol.end(), greater<long long>());

			long long sum = 0;

			for (int j = 0; j < n - c; j++){
				sum += sumCol[j];
			}

			ans = max(ans, sum);
		}

	} else{

		for (int mask = 0; mask < (1 << n); mask++){

			if (__builtin_popcount(mask) != n - c){
				continue;
			}

			vector<long long> sumLin(m, 0);

			for (int j = 0; j < n; j++){
				if ((mask & (1 << j)) == 0){
					continue;
				}

				for (int i = 0; i < m; i++){
					sumLin[i] += mat[i][j];
				}
			}

			sort(sumLin.begin(), sumLin.end(), greater<long long>());

			long long sum = 0;

			for (int i = 0; i < m - r; i++){
				sum += sumLin[i];
			}

			ans = max(ans, sum);
		}

	}

	fout << ans;
	fout << '\n';

	return 0;
}