Cod sursa(job #1331629)

Utilizator JHarciogRus Cristian JHarciog Data 31 ianuarie 2015 21:29:49
Problema Jocul Flip Scor 100
Compilator java Status done
Runda Arhiva de probleme Marime 1.79 kb
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;


/**
 * Problema 002 - Jocul Flip
 * 
 * @author Harciog
 */
public class Main {
	
	static int mMaxLines;
	static int mMaxColumns;
	static int[][] mData;
	
	static int[] mStack = new int[16];
	
	static int mResult = -100000000;
	
	public static void main(String args[]) throws IOException {
		
		// read data
		BufferedReader br = new BufferedReader(new FileReader("flip.in"));		
		String lineAsString = br.readLine();
		String[] values = lineAsString.split(" ");
		mMaxLines = Integer.parseInt(values[0]);
		mMaxColumns = Integer.parseInt(values[1]);
		mData = new int[mMaxLines][mMaxColumns];
		for (int line = 0; line < mMaxLines; line++) {			
			lineAsString = br.readLine();
			values = lineAsString.split(" ");
			for (int column = 0; column < values.length; column++) {
				mData[line][column] = Integer.parseInt(values[column]);
			}
		}
		
		back(0);
		
		
		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("flip.out"), "utf-8"));
		writer.write(String.valueOf(mResult));
		writer.close();
		
	}
	
	private static void back(int step) {
		if (step != mMaxLines) {
			for (int i = 0; i <= 1; i++) {
				mStack[step] = i;
				back(step + 1);
			}
		} else {
			int[] sumCol = new int[mMaxColumns];
			for (int l = 0; l < mMaxLines; l++) {
				for (int c = 0; c < mMaxColumns; c++) {
					sumCol[c] += mStack[l] == 0 ? mData[l][c] : -mData[l][c];
				}
			}
			int res = 0;
			for (int c = 0; c < mMaxColumns; c++) {
				res += sumCol[c] > 0 ? sumCol[c] : -sumCol[c];
			}
			if (res > mResult) {
				mResult = res;
			}
		}
	}

}