Pagini recente » Cod sursa (job #1343010) | Cod sursa (job #1622424) | Cod sursa (job #1623327) | Cod sursa (job #253639) | Cod sursa (job #1377796)
#include<fstream>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
long long getSum(int table[16][16], int N, int M) {
long long sum = 0;
for(int i = 0; i < N; ++i) {
for(int j = 0; j < M; ++j) {
sum += table[i][j];
}
}
return sum;
}
void flipCols(int table[16][16], int N, int M, vector<int> lines) {
for(int i = 0; i < N; ++i) {
if(lines[i] == 1) {
for(int j = 0; j < M; ++j) {
table[i][j] = -table[i][j];
}
}
}
}
void flipLines(int table[16][16], int N, int M, vector<int> cols) {
for(int j = 0; j < M; ++j) {
if(cols[j] == 1) {
for(int i = 0; i < N; ++i) {
table[i][j] = -table[i][j];
}
}
}
}
int main() {
ifstream fin ("flip.in");
ofstream fout("flip.out");
int N,M; fin >> N >> M;
int table[16][16];
long long maxSum = -90000000000000;
for(int i = 0; i < N; ++i) {
for(int j = 0; j < M; ++j) {
fin >> table[i][j];
}
}
for(int i = 0; i < N; ++i) {
vector<int> lines;
for(int j = N - 1; j >= 0; --j) {
if(j <= i) {
lines.push_back(1);
}
else {
lines.push_back(0);
}
}
for(int j = 0; j < M; ++j) {
vector<int> cols;
for(int k = M - 1; k >= 0; --k) {
if(k <= j) {
cols.push_back(1);
}
else {
cols.push_back(0);
}
}
/*
cout << "lines:";
for(int p = 0; p < N; ++p) {
cout << lines[p];
}
cout << '\n'; */
// here solution
do{
vector<int> newCols (cols);
/* cout << "newCols:";
for(int p = 0; p < M; ++p) {
cout << newCols[p];
}
cout << '\n'; */
do{
flipCols(table, N, M, lines);
flipLines(table, N, M, newCols);
maxSum = max(maxSum, getSum(table, N, M));
flipCols(table, N, M, lines);
flipLines(table, N, M, newCols);
/*
cout << "lines:";
for(int p = 0; p < N; ++p) {
cout << lines[p];
}
cout << "\ncols:";
for(int p = 0; p < M; ++p) {
cout << newCols[p];
} */
}while(next_permutation(newCols.begin(), newCols.end()));
// cout <<"\n-----------\n";
}while(next_permutation(lines.begin(), lines.end()));
}
}
fout << maxSum << "\n";
return 0;
}