Cod sursa(job #2680770)

Utilizator overstainedVlad Radu overstained Data 4 decembrie 2020 12:42:53
Problema Jocul Flip Scor 0
Compilator java Status done
Runda Arhiva de probleme Marime 1.39 kb
package memory.app;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {

  private static class IntRef {
    int i;
  }

  private static int computeMaxSum(int n, int m, int[][] a) {
    int [] c = new int[m];
    IntRef maxSum = new IntRef();
    computeMaxSum(0, n, m, a, c, maxSum);
    return maxSum.i;
  }

  private static void computeMaxSum(int k, int n, int m, int[][] a, int[] c, IntRef maxSum) {
    if(k==m) {
      int sumt = 0;
      for(int i=0;i<n;i++) {
        int sum = 0;
        for(int j=0;j<m;j++) {
          sum += c[j]*a[i][j];
        }
        if(sum < 0) {
          sum = sum * -1;
        }
        sumt += sum;
      }
      if(maxSum.i < sumt) {
        maxSum.i = sumt;
      }
    } else {
      c[k] = 1;
      computeMaxSum(k+1, n, m, a, c, maxSum);
      c[k] = -1;
      computeMaxSum(k+1, n, m, a, c, maxSum);
    }
  }

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

    int n = in.nextInt();
    int m = in.nextInt();

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

    int maxSum = computeMaxSum(n, m, a);

    out.printf("%d%n", maxSum);

    in.close();
    out.close();
  }
}