Pagini recente » Cod sursa (job #1168661) | Cod sursa (job #1813899) | Cod sursa (job #2590341) | Cod sursa (job #2886716) | Cod sursa (job #2197425)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("flip.in");
ofstream out("flip.out");
int matr[17][17], n, m;
int sumMax;
int operatie[47], sol[17];
void citire(){
in >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
in >> matr[i][j];
sumMax = sumMax + matr[i][j];
}
}
in.close();
}
void initializareOperatie(){
for(int i = 1; i <= m; i++){
operatie[i] = 1;
}
}
int maxim(int a, int b){
if(a > b){
return a;
}
return b;
}
void bkt(int varf){
for(int i = sol[varf - 1] + 1; i <= m; i++){
sol[varf] = i;
operatie[i] = -1;
int sumTemp = 0;
for(int lin = 1; lin <= n; lin++){
int sumLinPlus = 0, sumLinMinus = 0;
for(int col = 1; col <= m; col++){
sumLinMinus = sumLinMinus - operatie[col] * matr[lin][col];
sumLinPlus = sumLinPlus + operatie[col] * matr[lin][col];
}
sumTemp = sumTemp + maxim(sumLinPlus, sumLinMinus);
}
if(sumTemp )
if(sumTemp > sumMax){
sumMax = sumTemp;
}
if(varf < m){
bkt(varf + 1);
}
operatie[i] = 1;
}
}
int main() {
citire();
initializareOperatie();
bkt(1);
out << sumMax;
return 0;
}