UVa 348 - Optimal Array Multiplication Sequence

来源:互联网 发布:泉州淘宝美工培训学费 编辑:程序博客网 时间:2024/05/01 12:07
/* * UVa 348 - Optimal Array Multiplication Sequence * */import java.util.Scanner;class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n;int count = 0;Main mm = new Main();while ((n = scanner.nextInt()) > 0) {count ++;int[] p = new int[n + 1];for (int i = 0; i < n - 1; i++) {p[i] = scanner.nextInt();scanner.next();}p[n - 1] = scanner.nextInt();p[n] = scanner.nextInt();int[][] s = new int[n + 1][n + 1];// 存放分割点int[][] m = new int[n + 1][n + 1];// 存放代价mm.matrix_chain(p, m, s);System.out.print("Case " + count + ": ");mm.print(s, 1, n);System.out.println();}}private void matrix_chain(int[] p, int[][] m, int[][] s) {int i, j;int n = p.length - 1;// 矩阵链长度for (i = 1; i <= n; i++)m[i][i] = 0;// 初始化长度为1的链代价for (int l = 2; l <= n; l++) {// 矩阵链长度依次增加for (i = 1; i <= n - l + 1; i++) {// i,j的位置在变化 保证长度是lj = i + l - 1;m[i][j] = Integer.MAX_VALUE;// 初始化m[i][j]for (int k = i; k <= j - 1; k++) {// k的位置可以从i变化到j-1int q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];if (q < m[i][j]) {m[i][j] = q;s[i][j] = k;// 记录最优k值}}}}}private void print(int[][] s, int i, int j) {if (i == j)System.out.print("A" + i);else {System.out.print("(");print(s, i, s[i][j]);System.out.print(" x ");print(s, s[i][j] + 1, j);System.out.print(")");}}}

原创粉丝点击