Cod sursa(job #1891384)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 23 februarie 2017 23:10:48
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <vector>
#include <cstring>
#include <algorithm>

int mat[20][8000], sum[8000];

int main() {
	std::ifstream inputFile("elimin.in");
	std::ofstream outputFile("elimin.out");

	int lineCount, columnCount, delLines, delColumns;
	inputFile >> lineCount >> columnCount >> delLines >> delColumns;

	if (lineCount <= columnCount) {
		for (int i = 1; i <= lineCount; ++i)
			for (int j = 1; j <= columnCount; ++j)
				inputFile >> mat[i][j];
	}
	else {
		std::swap(lineCount, columnCount);
		std::swap(delLines, delColumns);

		for (int j = 1; j <= columnCount; ++j)
			for (int i = 1; i <= lineCount; ++i)
				inputFile >> mat[i][j];
	}

	int solution = 0;
	for (int config = 0; config < (1 << lineCount); ++config) {
		if (__builtin_popcount(config) != delLines)
			continue;

		for (int i = 1; i <= columnCount; ++i)
			sum[i] = 0;

		for (int i = 1; i <= lineCount; ++i) {
			if ((config >> (i - 1)) & 1)
				continue;

			for (int j = 1; j <= columnCount; ++j)
				sum[j] += mat[i][j];
		}

		std::sort(sum + 1, sum + columnCount + 1);

		int curr = 0;
		for (int i = columnCount; i > delColumns; --i)
			curr += sum[i];

		solution = std::max(solution, curr);
	}

	outputFile << solution << '\n';

	inputFile.close();
	outputFile.close();

	return 0;
}

//Trust me, I'm the Doctor!