紫書例題6-3 (UVa 442)
阿新 • • 發佈:2019-01-26
for lse cout 例題 gif src cstring opened ble
題目地址:https://vjudge.net/problem/UVA-442
題目大意:汗顏,其實我是直接看紫書的中文題意的,大意就是計算兩個矩陣乘法次數,設計線性代數知識,可自己百度矩陣乘法。
思路:棧+模擬,左括號開始入棧,右括號開始計算棧頂兩個矩陣的乘法次數然後再將新矩陣的n,m入棧即可。
AC代碼:
#include <iostream> #include <string> #include <stack> #include <cstring> using namespace std; struct node { intView Codem,n; }s[30]; //結構體,記錄n,m int main() { int n; cin >> n; for(int i=1;i<=n;i++) { char ch; cin >> ch; cin >> s[ch-‘A‘].m >> s[ch-‘A‘].n; } int flag=0; int ans=0; char ch[50]; while(cin>>ch) { ans=0; stack<node> q; flag=0; for(int i=0;i<strlen(ch);i++) { if(ch[i]!=‘)‘&&ch[i]!=‘(‘) //如果是字母就入棧,並且直接轉化成n*m q.push(s[ch[i]-‘A‘]); else if(ch[i]==‘)‘) { node b=q.top(); q.pop(); node a=q.top(); q.pop(); if(a.n!=b.m) { flag=1; break; } else { ans+=a.m*a.n*b.n; //累計加和 node c; c.m=a.m; c.n=b.n; q.push(c); //這裏可以寫出q.push(a.m,b.n) } } } if(!flag) cout << ans << endl; else cout << "error" << endl; } return 0; }
紫書例題6-3 (UVa 442)