题解 | #矩阵乘法计算量估算#

矩阵乘法计算量估算

https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        Map<Character, Matrix> map = new HashMap<>();
        List<Matrix> list = new ArrayList<>();
        char name = 'A';
        for (int i = 0; i < n; i++) {
            String[] line = sc.nextLine().split(" ");
            int left = Integer.parseInt(line[0]);
            int right = Integer.parseInt(line[1]);
            map.put(name, new Matrix(left, right));
            name++;
        }
        String s = sc.nextLine();
        Result r = calMatrix(map, s);
        System.out.println(r.value);
    }
    public static Result calMatrix(Map<Character, Matrix> map, String s) {
        int resVal = 0;
        Matrix resMatrix = null;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (Character.isLetter(c)) {
                Matrix m = map.get(c);
                if (resMatrix == null) {
                    resMatrix = m;
                } else {
                    resVal = resVal + resMatrix.left * m.left * m.right;
                    resMatrix = new Matrix(resMatrix.left, m.right);
                }
            }
            if (c == '(') {
                int count = 0;
                int j = i + 1;
                for (; j < s.length(); j++) {
                    if (s.charAt(j) == '(') {
                        count++;
                    }
                    if (s.charAt(j) == ')') {
                        if (count == 0) {
                            break;
                        }
                        count--;
                    }
                }
                Result r = calMatrix(map, s.substring(i + 1, j));
                if (resMatrix == null) {
                    resVal = resVal  + r.value;
                    resMatrix = r.mx;
                } else {
                    resVal = resVal + resMatrix.left *  r.mx.left * r.mx.right + r.value;
                    resMatrix = new Matrix(resMatrix.left, r.mx.right);
                }
                i = j;
            }
        }
        return new Result(resVal, resMatrix);
    }
}
class Matrix {
    public int left;
    public int right;
    public Matrix() {}
    public Matrix(int left, int right) {
        this.left = left;
        this.right = right;
    }
}
class Result {
    public int value;
    public Matrix mx;
    public Result() {}
    public Result(int value, Matrix matrix) {
        this.value = value;
        this.mx = matrix;
    }
}

全部评论

相关推荐

EEbond:给北邮✌️跪了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务