Pagini recente » Istoria paginii utilizator/cartof007 | Cod sursa (job #1856235) | Cod sursa (job #1609331) | Cod sursa (job #2013698) | Cod sursa (job #804772)
Cod sursa(job #804772)
#include <fstream>
using namespace std;
ifstream in("flip.in");
ofstream out("flip.out");
const int N=17;
int n,m,result=-(1<<30),matrixval;
int a[N][N],sl[N],sc[N]; // suma linie si suma coloana de N
void read(){
in>>n>>m;
int i,j;
for(i=1;i<=n;++i){
for(j=1;j<=m;++j){
in>>a[i][j];
matrixval+=a[i][j];
}
}
}
int flip(int i,int j){
int val=matrixval;
int lin=i,col=j;
for(int c=1;col;col=col>>1,c++){
if(col&1){
val-=(2*sc[c]);
}
}
for(int l=1,lin=i;lin;lin=lin>>1,l++){
if(lin&1){
val-=(2*sl[l]);
for(int c=1,col=j;col;col=col>>1,c++){
if(col&1){
val+=(4*a[l][c]);
}
}
}
}
return val;
}
void solve(){
int sublin=1<<n;
int subcol=1<<m;
int i,j;
for(i=1;i<=n;++i){
for(j=1;j<=m;++j){
sl[i]+=a[i][j];
}
}
for(i=1;i<=m;++i){
for(j=1;j<=n;++j){
sc[i]+=a[j][i];
}
}
for(i=0;i<sublin;++i){
for(j=0;j<subcol;++j){
result=max(result,flip(i,j));
}
}
out<<result;
}
int main(){
read();
solve();
return 0;
}