Cod sursa(job #1442610)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 25 mai 2015 22:00:10
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <utility>
#include <array>
using namespace std;

constexpr int nmax = 16;

using mat = array<array<int, nmax>, nmax>;
using info = array<bool, nmax>;

void make_next_config(info& config, const int lung){
	int carry = 1;
	for(int i = 0; i < lung; ++i){
		carry += int(config[i]);
		config[i] = (carry%2 != 0);
		carry /= 2; } }

int find_max_sum_config(const mat& tabla, const info& config, const int n, const int m){
	int rez = 0;
	for(int i = 0, suma_lin; i < n; ++i){
		suma_lin = 0;
		for(int j = 0; j < m; ++j){
			suma_lin += (config[j] ? tabla[i][j] : -tabla[i][j]); }
		rez += max(suma_lin, -suma_lin); }
	return rez; }

int main(){
	ifstream f("flip.in");
	ofstream g("flip.out");
	int n, m;
	mat tabla;
	f >> n >> m;
	for(int i = 0; i < n; ++i){
		for(int j = 0; j < m; ++j){
			f >> tabla[i][j]; } }
	info config = {0};
	int rez = 1<<31;
	for(int i = 0; i < (1<<m); ++i){
		rez = max(rez, find_max_sum_config(tabla, config, n, m));
		make_next_config(config, m); }
	g << rez;
	return 0; }