Cod sursa(job #3347750)

Utilizator matei.brestoiuBrestoiu Matei-Dimitri matei.brestoiu Data 18 martie 2026 10:15:25
Problema Parantezare optima de matrici Scor 100
Compilator java Status done
Runda Arhiva educationala Marime 1.4 kb
import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
    public long solve(int n, int[] d) {
        int i, j, k, len;
        long [][] dp =  new long[n + 1][n + 1];
        for (i = 1; i <= n; i++) {
            dp[i][i] = 0;
        }
        for (len = 2; len <= n; len++) {
            for (i = 1; i + len - 1 <= n; i++) {
                j = i + len - 1;
                dp[i][j] = Long.MAX_VALUE;
                for (k = i; k < j; k++) {
                    long sol = dp[i][k] + dp[k + 1][j] + (long) d[i - 1] * d[k] * d[j];
                    dp[i][j] = Math.min(dp[i][j], sol);
                }
            }
        }
        return dp[1][n];
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("podm.in"));

        // Citim N de pe prima linie
        int n = Integer.parseInt(br.readLine().trim());
        int[] d = new int[n + 1];

        // Citim linia a doua cu dimensiunile și o spargem în "token-uri" (bucăți)
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i <= n; i++) {
            d[i] = Integer.parseInt(st.nextToken());
        }
        br.close();
        PrintWriter pw = new PrintWriter(new File("podm.out"));
        pw.println(new Main().solve(n, d));
        pw.close();
    }
}