Pagini recente » Cod sursa (job #1276199) | Cod sursa (job #710153) | Cod sursa (job #3241954) | Cod sursa (job #1266588) | Cod sursa (job #2179737)
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();
}
}