Cod sursa(job #1066375)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 24 decembrie 2013 16:59:31
Problema Elimin Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.03 kb
#include<fstream>
#include<algorithm>

using namespace std;

ifstream f("elimin.in");
ofstream g("elimin.out");

const int Nmax = 700;

int n, m, r, c, maxsum;
int aux[Nmax], sum[Nmax], mat[Nmax][Nmax];

int main() {

	int i, j, k, s, nrb;

	f >> n >> m >> r >> c;

	for (i = 1; i <= n; ++i)
		for (j = 1; j <= m; ++j)
			if (n > m)
				f >> mat[j][i];
			else
				f >> mat[i][j];

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

	for (i = 1; i <= n; ++i)
		for (j = 1; j <= m; ++j)
			sum[j] += mat[i][j];

	for (i = 0; i < (1 << n); ++i) {
		nrb = 0;
		for (j = 0; (1 << j) <= i; ++j)
			if ((1 << j) & i)
				++nrb;
		if (nrb != r)
			continue;
		copy(sum + 1, sum + m + 1, aux + 1);
		for (j = 0; (1 << j) <= i; ++j)
			if ((1 << j) & i)
				for (k = 1; k <= m; ++k)
					aux[k] -= mat[j + 1][k];
		nth_element(aux + 1, aux + c + 1, aux + m + 1);
		s = 0;
		for (j = c + 1; j <= m; ++j)
			s += aux[j];
		maxsum = max(maxsum, s);
	}

	g << maxsum;

	f.close();
	g.close();

	return 0;
}