Cod sursa(job #1552889)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 18 decembrie 2015 21:14:57
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <cstdio>

using namespace std;

int s,retine;
int n,m,st[35],mx;
int a[17][17],alt[17][17];

void verificare(){
    for(int i = 1; i <= n; i++){
        if(st[i] == 1){
            for(int j = 1; j <= m; j++){
                alt[i][j] = -a[i][j];
            }
        }
    }
    for(int i = n + 1; i <= n + m; i++){
        if(st[i] == 1){
            for(int j = 1; j <= n; j++){
                alt[j][i - n] = -a[j][i - n];
            }
        }
    }
    int sum = 0;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            sum += alt[i][j];
        }
    }
    if(sum > mx){
        mx = sum;
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            alt[i][j] = a[i][j];
        }
    }
}
void back(int k){
    for(int i = 0; i <= 1; i++){
        st[k] = i;

        if(k <= n + m){
            if(k == n + m)
                verificare();
            else
                back(k + 1);
        }
    }
}
int main()
{
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            scanf("%d",&a[i][j]);
            s += a[i][j];
        }
    }
    retine = s;
    back(1);
    printf("%d",mx);
    return 0;
}