Cod sursa(job #1518984)

Utilizator serbanSlincu Serban serban Data 6 noiembrie 2015 17:37:58
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <bits/stdc++.h>

using namespace std;

int x[20], a[20][20], sl[20], sc[20];

int main()
{
    int n, m;
    freopen("flip.in", "r", stdin);
    freopen("flip.out", "w", stdout);

    cin >> n >> m;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
            cin >> a[i][j], sl[i] += a[i][j];//, sc[i] += a[i][j];

    for(int i = 1; i <= n; i ++)
        x[i] = -1;
    int i = 1, mx = 0, aux[20];
    while(i != 0) {
        while(i != 0 && i <= n) {
            x[i] ++;
            if(x[i] > 1) x[i] = -1, i --;
            else i ++;
        }
        if(i > n) {
            int s = 0;
            for(int j = 1; j <= n; j ++) {
                if(x[j])
                    s -= sl[j];
                else s += sl[j];
            }
            if(s > mx) {
                mx = s;
                for(int j = 1; j <= n; j ++)
                    aux[j] = x[j];
            }
            i = n;
        }
    }
    for(int i = 1; i <= n; i ++)
        if(aux[i]) {
            for(int j = 1; j <= m; j ++)
                a[i][j] = -a[i][j];
        }

    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
            sc[j] += a[i][j];

    i = 1;
    mx = 0;
    while(i != 0) {
        while(i != 0 && i <= m) {
            x[i] ++;
            if(x[i] > 1) x[i] = -1, i --;
            else i ++;
        }
        if(i > m) {
            int s = 0;
            for(int j = 1; j <= m; j ++) {
                if(x[j])
                    s -= sc[j];
                else s += sc[j];
            }
            if(s > mx) {
                mx = s;
            }
            i = m;
        }
    }
    cout << mx << "\n";
    return 0;
}