1. 程式人生 > >紫書例題6-3 (UVa 442)

紫書例題6-3 (UVa 442)

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
{
    int
m,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; }
View Code

紫書例題6-3 (UVa 442)