Pagini recente » Cod sursa (job #555490) | Cod sursa (job #3240761) | Cod sursa (job #1390304) | Cod sursa (job #1128755) | Cod sursa (job #2119504)
#include <iostream>
#include <bits/stdc++.h>
#define INFILE "flip.in"
#define OUTFILE "flip.out"
#define COLOANA 1
#define LINIE 0
using namespace std;
const int NMAX=20;
int N,M;
array<array<int,NMAX>,NMAX> Map;
int smax=-1;
array<bool,2*NMAX> Flip;
array<int,NMAX> SCOL;
array<int,NMAX> SLIN;
ifstream in(INFILE);
ofstream out(OUTFILE);
void Read(){
in>>N>>M;
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
in>>Map[i][j];
SLIN[i]+=Map[i][j];
}
}
for(int j=1;j<=M;j++){
for(int i=1;i<=N;i++){
SCOL[j]+=Map[i][j];
}
}
}
int Sum(){
int s=0;
for(int i=1;i<=N;i++){
if(Flip[i]){
s-=SLIN[i];
}
else{
s+=SLIN[i];
}
for(int j=N+1;j<=M+N;j++){
if(Flip[j]&&Flip[i]){
s+=2*Map[i][j-N];
}
else if(Flip[j]&&!Flip[i]){
s-=2*Map[i][j-N];
}
}
}
return s;
}
void Backtrack(int k){
if(k==M+N+1){
smax=max(smax,Sum());
//cout<<smax<<endl;
}
else{
Flip[k]=true;
Backtrack(k+1);
Flip[k]=false;
Backtrack(k+1);
}
}
int main()
{
Read();
Backtrack(1);
out<<smax<<"\n";
return 0;
}