Cod sursa(job #2179737)

Utilizator xsorinJohn Smith xsorin Data 20 martie 2018 13:42:51
Problema Jocul Flip Scor 0
Compilator java Status done
Runda Arhiva de probleme Marime 1.62 kb
import java.io.*;
import java.util.StringTokenizer;
 
/**
 * Implementarea algoritmului de gasire a inmultiri optime de matrice
 */
 
public class Main {
    private static String input = "podm.in";
    private static String output = "podm.out";
 
    public static long findOptimalParentheses(long[] p) {
        int n = p.length;
        long[][] m = new long[n][n];
 
 
        for (int length = 2; length < p.length; length++) {
            for (int i = 1; i < n + 1 - length; i++) {
                int j = i + length - 1;
 
                m[i][j] = Long.MAX_VALUE;
                for (int k = i; k < j; k++) {
                    if (m[i][j] > m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j]) {
                        m[i][j] = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
                    }
                }
            }
        }
 
        return m[1][n - 1];
    }
 
    public static void main(String[] args) throws IOException {
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(output));
        BufferedReader bufferedReader = new BufferedReader( new FileReader(input), 2048);
 
        /** citirea datelor */
        int n = Integer.parseInt(bufferedReader.readLine().trim());
        long[] p = new long[n + 1];
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine().trim());
        for(int i = 0; i <= n; i++){
            p[i] = Long.parseLong(stringTokenizer.nextToken().trim());
        }
 
        bufferedWriter.write(findOptimalParentheses(p) + " \n");
        bufferedReader.close();
        bufferedWriter.close();
    }
}