UVA 442-Matrix Chain Multiplication
题目大意:矩阵相乘,求乘法次数
解题思路:用栈存,遇到‘)’时将栈顶俩位俩乘后存入,并计算乘法次数
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main() {
int n;
int a[100][2];
int s[1000][2];
int t;
char m[1000];
cin >> n;
getchar();
for(int i = 0; i < n; i++) {
char c = getchar();
scanf("%d%d", &a[c-'A'][0], &a[c-'A'][1]);
getchar();
}
while(gets(m)) {
int sum = 0;
int p = 1;
t = 0;
getchar();
for(int i = 0; m[i] != '\0'; i++) {
if(m[i] == '(')
continue;
else if(m[i] == ')') {
int t1 =t-2, t2 =t-1;
if(s[t1][1] != s[t2][0]) {
p = 0;
break;
}
else
sum += s[t1][0] * s[t2][0] * s[t2][1];
s[t1][1] = s[t2][1];
t--;
}
else {
int t3 = m[i] - 'A';
s[t][0] = a[t3][0];
s[t][1] = a[t3][1];
t++;
}
}
if(p == 1)
printf("%d\n", sum);
else
printf("error\n");
}
return 0;
}