###前提・実現したいこと
連鎖的に行列の積を求める
n 個の
行列の連鎖が与えられた時スカラー乗算が最小になる計算順序の最小回数を求めるもののアルゴリズムなんですが、
matR 行配列、matC 列配列
for(int i = fr; i < to; i++){
int r = Mat(fr, i) + Mat(i+1, to) + (matR[fr] * matC[i] * matC[to]);
ここのところの解説が欲しいです。
入力
6
30 35
35 15
15 5
5 10
10 20
20 25
行列の積の計算をi番目で区切ったコストとそれ以降の計算コストということは分かるんですが、
(matR[fr] * matC[i] * matC[to])
この辺が分かりません。
###発生している問題・エラーメッセージ
エラーメッセージ
###該当のソースコード
java
1import java.util.*; 2 3public class Algo36{ 4 5 static int[][] multi; 6 static int[] matR; 7 static int[] matC; 8 9 public static void main(String[] args){ 10 11 Scanner scan = new Scanner(System.in); 12 13 int n = scan.nextInt(); 14 multi = new int[n][n]; 15 matR = new int[n]; 16 matC = new int[n]; 17 18 for(int i = 0; i < n; i++){ 19 matR[i] = scan.nextInt(); 20 matC[i] = scan.nextInt(); 21 } 22 23 System.out.println(Mat(0, n-1)); 24 25 scan.close(); 26 System.exit(0); 27 } 28 29 private static int Mat(int fr, int to){ 30 if(fr == to) 31 return 0; 32 if(multi[fr][to] == 0){ 33 int min = Integer.MAX_VALUE; 34 for(int i = fr; i < to; i++){ 35 int r = Mat(fr, i) + Mat(i+1, to) + (matR[fr] * matC[i] * matC[to]); 36 if(r < min) 37 min = r; 38 } 39 multi[fr][to] = min; 40 } 41 return multi[fr][to]; 42 } 43}
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答1件
あなたの回答
tips
プレビュー