Cod sursa(job #1469966)

Utilizator slycerdan dragomir slycer Data 9 august 2015 23:36:25
Problema Jocul Flip Scor 100
Compilator java Status done
Runda Arhiva de probleme Marime 1.56 kb

import java.io.*;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {

    static int n;
    static int m;
    static int max = Integer.MIN_VALUE;

    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(new FileInputStream("flip.in"));
        PrintWriter out = new PrintWriter("flip.out");
        n = in.nextInt();
        m = in.nextInt();

        int [][] data = new int[n][m];
        for ( int i=0; i<n; i++ ){
            for ( int j=0; j<m; j++ ){
                data[i][j] = in.nextInt();
            }
        }

        solve(0,data );

        out.println( max );
        out.close();;
    }


    public static void flipLinie( int linie, int [][] data ){
        for ( int i=0; i<data[linie].length; i++ ){
            data[linie][i] = -data[linie][i];
        }
    }


    public static int bestSumColoana( int coloana, int [][] data ){
        int positive=0;
        int negative=0;
        for ( int i=0; i<data.length; i++ ){
            positive += data[i][coloana];
            negative += -data[i][coloana];
        }
        return Math.max( positive, negative );
    }

    public static void solve( int linie ,int [][] data ){
        if ( linie >= n ){
            int currentBest = 0;
            for ( int c=0; c<data[0].length; c++ ){
                currentBest += bestSumColoana( c, data );
            }
            max = Math.max( max, currentBest );
        } else {
            solve( linie+1, data );
            flipLinie(linie, data );
            solve( linie+1, data );
        }
    }

}