Cod sursa(job #2313513)

Utilizator livliviLivia Magureanu livlivi Data 6 ianuarie 2019 23:23:18
Problema Elimin Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

ifstream cin ("elimin.in");
ofstream cout ("elimin.out");

vector<vector<int>> a;
vector<int> sp;

int main(){
	int n, m; cin >> n >> m;
	int r, c; cin >> r >> c;

	if (n < m){
		a.resize(m + 1);
		sp.resize(m);
	}
	else {
		a.resize(n + 1);
		sp.resize(n);
	}

	for(int i = 0; i < n; i++)
		for(int j = 0; j < m; j++){
			int x; cin >> x;
			if (n < m) a[j].push_back(x);
			else a[i].push_back(x);
		}

	if (n < m){
		swap(n, m);
		swap(r, c);
	}

	a[n].resize(m, 0);
	for(int i = 0; i < n; i++){
		a[i].push_back(0);
		for(int j = 0; j < m; j++){
			a[i][m] += a[i][j];
			a[n][j] += a[i][j];
		}
	}

	int ans = 0;
	for(int i = 0; i < (1 << m); i++){
		int cnt = 0;
		for(int j = 0; j < m; j++)
			cnt += (((1 << j) & i) != 0);

		if (cnt != c) continue;

		for(int ii = 0; ii < n; ii++)
			sp[ii] = a[ii][m];

		cnt = 0;
		for(int j = 0; j < m; j++){
			if (((1 << j) & i) != 0)
				for(int ii = 0; ii < n; ii ++)
					sp[ii] -= a[ii][j];
			else cnt += a[n][j];
		}

		sort(sp.begin(), sp.end());

		for(int ii = 0; ii < r; ii++)
			cnt -= sp[ii];

		ans = max(ans, cnt);
	}

	cout << ans << endl;
	return 0;
}