题解 | #矩阵乘法计算量估算#
矩阵乘法计算量估算
https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b?tpId=37&tqId=21292&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
#include <iostream> #include <vector> #include <utility> #include <stack> using namespace std; int main() { int n,sum=0; char c; stack<char> cal; //存放表达式 cin>>n; vector<pair<int,int>> matrix; //存放输入矩阵以及计算中产生的矩阵 for(int i=0;i<n;i++){ //输入矩阵 int x,y; cin>>x>>y; matrix.push_back(make_pair(x,y)); } while(cin>>c){ if(c=='('||(c<='Z'&&c>='A')){ //'('与字母入栈 cal.push(c); } if(c==')'){ //输入')'开始计算,因为两个括号间只有两个矩阵相乘的一次计算,故不使用循环 int i=cal.top()-'A'; //记录第二个矩阵的下标 cal.pop(); //弹出矩阵 int j=cal.top()-'A'; //记录第一个矩阵的下标 cal.pop(); //弹出矩阵 sum+=matrix[j].first*matrix[j].second*matrix[i].second;//计算量 cal.pop(); //弹出'(' cal.push(matrix.size()+'A'); //记录新产生的矩阵,下标为matrix.size()+'A' matrix.push_back(make_pair(matrix[j].first,matrix[i].second)); } } cout<<sum<<endl; } // 64 位输出请用 printf("%lld")