矩阵乘法计算量估算
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
int n,i,r1,c1,r2,c2;
string str;
stack<int> row;
stack<int> col;
while(cin>>n){
int a[n][2];//存行列
int res=0;
int num1=0,num2=0;
for(i=0;i<n;i++)
cin>>a[i][0]>>a[i][1];
cin>>str;
while(!row.empty())
row.pop();
while(!col.empty())
col.pop();
for(i=0;i<str.size();i++){
if(str[i]=='('){
num1++;
continue;
}
else if(str[i]==')'){
num2++;
if(num2<=num1){
r1=row.top();
c1=col.top();
row.pop();
col.pop();
r2=row.top();
c2=col.top();
row.pop();
col.pop();
res+=r2*c2*c1;
row.push(r2);
col.push(c1);
}
}
else{
row.push(a[str[i]-'A'][0]);
col.push(a[str[i]-'A'][1]);
//cout<<a[str[i]-'A'][0]<<" "<<a[str[i]-'A'][1]<<endl;
}
}
cout<<res<<endl;
}
}
思路
利用栈依次遍历:
1、遇到"(“不处理;
2、遇到”)“弹栈,由于本题样例中只有(AB)这种情况,没有(ABC)这种情况,因此在遇到”)"后
只用弹栈两次,然后计算对应的两个矩阵相乘所需要的乘法辞书,并将相乘之后得到的矩阵的行、列
信息压到栈中;
3、遇到的是字母,则将其所对应的矩阵行列信息压入栈中;
参考
https://www.nowcoder.com/questionTerminal/15e41630514445719a942e004edc0a5b?commentTags=Python