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

矩阵乘法计算量估算

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

#include <stdio.h>
#include <string.h>

int n;
void compute(char s[], int arr_size[][2],int len, int size_r[]);
int multi_num;

int main() {
    int n;
    int arr_size[20][2];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d %d", &arr_size[i][0],&arr_size[i][1]);
    }

    int size_r[2];
    char s[200] = {0};
    scanf("%s",s);
    int len = strlen(s);

    n = 0;
    multi_num = 0;
    compute(s,arr_size,len,size_r);//计算法则,矩阵大小数组,法则字符长度,中间变量存储
    printf("%d\n",multi_num);

    return 0;
}

void compute(char s[], int arr_size[][2],int len, int size_r[])
{
    int size[26][2];//每次计算括号内的矩阵大小:行、列
    int i = 0;

    while(n<len){
        if(s[n]=='('){
            n++;
            compute(s,arr_size,len,size_r);
            size[i][0] = size_r[0];
            size[i][1] = size_r[1];
            i++;
        }
        else if(s[n] == ')'){ //一次递归完成
            n++;
            break;
        }
        else{
            size[i][0] = arr_size[s[n] - 'A'][0]; //保证每次计算的矩阵均从size中的第一行开始
            size[i][1] = arr_size[s[n] - 'A'][1];
            n++;
            i++;
        }
    }
    for(int j=0; j<i-1; j++)
    {
        multi_num = multi_num + size[j][0]*size[j][1]*size[j+1][1];//10*20*5矩阵乘法计算次数
        size[j+1][0] = size[j][0];
    }
    size_r[0] = size[0][0]; //递归完成后的当前结果存储至临时变量
    size_r[1] = size[i-1][1];
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务