Pagini recente » Cod sursa (job #1370275) | Cod sursa (job #2126849) | Cod sursa (job #1369810) | Cod sursa (job #2709316) | Cod sursa (job #2252973)
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int n, m, mn;
int a[18][18], so;
int scol[18], srand[18];
bool fc[18], fr[18];
int smax;
void calculeaza(){
int suma = so;
for(int i = 1; i<=n; ++i){
if(fr[i]==1){
suma-=2*srand[i];
}
}
for(int i = 1; i<=m; ++i){
if(fc[i]==1){
suma-=2*scol[i];
}
}
for(int i = 1; i<=n; ++i){
for(int j = 1; j<=m; ++j){
if(fr[i]==1 && fc[j]==1){
suma+=4*a[i][j];
}
}
}
if(suma>smax) smax = suma;
}
void flip(int k){
for(int i = 0; i<=1; ++i){
if(k<n) fc[k] = i;
else fr[k-n] = i;
calculeaza();
if(k<mn){
flip(k+1);
}
}
}
int main()
{
smax = so;
fin>>n>>m;
so = 0;
for(int i=1; i<=n; ++i){
for(int j = 1; j<=m; ++j){
fin>>a[i][j];
scol[j]+=a[i][j];
srand[i]+=a[i][j];
so+=a[i][j];
}
}
mn = m+n;
flip(1);
fout<<smax;
return 0;
}