Pagini recente » Cod sursa (job #3211551) | Cod sursa (job #642316) | Cod sursa (job #915830) | Cod sursa (job #1904719) | Cod sursa (job #1442610)
#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; }