Pagini recente » Cod sursa (job #493930) | Cod sursa (job #2004695) | Cod sursa (job #2918612) | Cod sursa (job #39966) | Cod sursa (job #2023832)
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int n, m, flip[16][16], sumrow[16], sumcol[16];
long maxsum = -100000000;
struct lista{
int elem[16], len = 0;
}linii;
void bkt2(int i, long suma){
if(i >= m){
if(suma > maxsum) maxsum = suma;
return;
}
bkt2(i+1, suma);
suma -= 2*sumcol[i];
for (int j = 0; j < linii.len; j++) suma += 4 * flip[linii.elem[j]][i];
bkt2(i+1, suma);
}
void bkt1(int i, long suma){
if(i >= n){
bkt2(0, suma);
linii.len--;
return;
}
bkt1(i+1, suma);
suma -= 2*sumrow[i];
linii.elem[linii.len++] = i;
bkt1(i+1, suma);
linii.len--;
}
int main()
{
int i, j, suma = 0;
f >> n >> m;
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
f >> flip[i][j];
for(i = 0; i < n; i++)
for(j = 0; j < m; j++){
sumrow[i] += flip[i][j];
sumcol[j] += flip[i][j];
suma += flip[i][j];
}
bkt1(0, suma);
g << maxsum;
return 0;
}