Pagini recente » Cod sursa (job #3253289) | Cod sursa (job #1558125) | Cod sursa (job #3003494) | Cod sursa (job #599202) | Cod sursa (job #1697878)
#include <iostream>
#include <fstream>
std::ifstream infile("flip.in");
std::ofstream outfile("flip.out");
int N, M;
int lastSwaps[16];
int MAX = -30000;
void read(int matrix[16][16]){
infile >> N >> M;
int tmp;
for(int i = 0 ; i < N ; ++i){
for(int j = 0 ; j < M ; ++j){
infile >> tmp;
matrix[i][j] = tmp;
}
}
}
void print(int matrix[16][16]){
for(int i = 0 ; i < N ; ++i){
std::cout << "\n";
for(int j = 0 ; j < M ; ++j){
std::cout << matrix[i][j] << " ";
}
}
}
int flipSum(int matrix[16][16]){
int sum = 0;
int tmpSum ;
for(int j = 0 ; j < M ; ++j){
tmpSum = 0;
for(int i = 0 ; i < N ; ++i){
tmpSum += matrix[i][j];
}
if(tmpSum < 0){
sum -= tmpSum ;
}else{
sum += tmpSum;
}
}
return sum;
}
void swapRows(int data[],int matrix[16][16]){
for(int i = 0; i < N ; ++i){
if(data[i] == 1){
for(int j = 0 ; j < M ; ++j){
matrix[i][j] *= -1;
}
}
}
int flipSuma = flipSum(matrix);
if (MAX < flipSuma){
MAX = flipSuma;
}
}
void getSwaps(int data[],int index,int size,int matrix[16][16]){
if(index == size){
swapRows(data,matrix);
return ;
}
getSwaps(data,index + 1 , size, matrix);
data[index] = (data[index] + 1 ) % 2;
getSwaps(data,index + 1 , size, matrix);
}
int main(){
int matrix[16][16];
read(matrix);
//print();
int data[N];// in order to not swap like crazy, let' memoize the last swaps shape
for(int i = 0 ; i < N ; ++i){
data[i] = 0; //unswapped
}
getSwaps(data,0,N,matrix);
outfile << MAX;
infile.close();
outfile.close();
return 0;
}