您的位置:首页 > 大数据 > 人工智能

uva442 Matrix Chain Multiplication

2013-05-15 22:23 330 查看
题意:给定n个矩阵 然后给出每个矩阵的行数和列数 让你求出一个矩阵表达式的乘的次数

解题思路:栈

解题代码:

// File Name: uva442.c
// Author: darkdream
// Created Time: 2013年05月15日 星期三 21时15分38秒

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
struct node
{
int a, b;
}m[300] ;
int main(){

//freopen("/home/plac/problem/input.txt","r",stdin);
//freopen("/home/plac/problem/output.txt","w",stdout);
int n;
scanf("%d",&n);
char str[1000];
getchar();
for(int i = 1;i <= n;i ++)
{
char c;
c = getchar();
scanf("%d %d",&m[c-'A'+1].a,&m[c-'A'+1].b);
getchar();
}
int a[1000];
int b[1000] ;
while(scanf("%s",str) != EOF)
{
int sum = 0 ,k = n+1, ok = 1;
struct node temp;
if(strlen(str) == 1)
printf("0\n");
else
{
for(int i = 0 ;i < strlen(str); i ++)
{
if(str[i] == '(')
a[i] = -1 ;
else if(str[i] == ')')
a[i] = -2;
else
a[i] = str[i]-'A' +1;
}
int j = -1 ;
for(int  i = 0 ;i <strlen(str) ; i++)
{
if(a[i] == -1)
{
j++ ;
b[j] = a[i];
}
else if(a[i] == -2)
{
b[j-1] = b[j];
b[j] = 0 ;
j--;
if(b[j-1] > 0)
{
if(m[b[j]].a == m[b[j-1]].b)
{
sum += m[b[j-1]].a*m[b[j-1]].b*m[b[j]].b;
m[k].a = m[b[j-1]].a;
m[k].b = m[b[j]].b;
b[j-1] = k;
b[j] = 0;
j--;
k++;

}
else
{
ok = 0 ;
break;
}

}

}
else
{
if(b[j] > 0 )
{
if(m[a[i]].a == m[b[j]].b)
{
sum += m[b[j]].a*m[b[j]].b*m[a[i]].b;
m[k].a = m[b[j]].a;
m[k].b = m[a[i]].b;
b[j] = k;
k++;

}
else
{
ok = 0 ;
break;
}
}
else
{
j++;
b[j] = a[i];
}
}
}

if(ok)
printf("%d\n",sum);
else
printf("error\n");
}

}

return 0 ;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: