Pagini recente » Cod sursa (job #2075964) | Cod sursa (job #2457189) | Cod sursa (job #668340) | Cod sursa (job #1010803) | Cod sursa (job #2176544)
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(int[] 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] = Integer.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());
int[] p = new int[n + 1];
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine().trim());
for(int i = 0; i <= n; i++){
p[i] = Integer.parseInt(stringTokenizer.nextToken().trim());
}
bufferedWriter.write(findOptimalParentheses(p) + " \n");
bufferedReader.close();
bufferedWriter.close();
}
}