码迷,mamicode.com
首页 > 其他好文 > 详细

例题6-3 Matrix Chain Multiplication ,Uva 442

时间:2016-08-07 10:53:40      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

 

这个题思路没有任何问题,但还是做了近三个小时,其中2个多小时调试技术分享

得到的经验有以下几点:

  1. 一定学会调试,掌握输出中间量的技巧,加强gdb调试的学习
  2. 有时候代码不对,得到的结果却是对的(之后总结以下常见错误)
  3. 能用结构体,就别用数组,容易出错(暂时还不知道为什么)
  4. 代码要规范,空格该有就要有
  5. 有些不规范表达式,不同编译器出现不同结果,注意应避免使用这类语句

像这道题主要坑在了第三点上,以后要注意避免

 

以下是AC代码

 

 

#include <cstdio>
#include <stack>
#include <cstring>
#include <cctype>
const int MAXN=1000+10;
using namespace std;
char exps[MAXN];
struct Matrix {
    int a, b;
    Matrix(int a = 0,int b = 0):a(a), b(b) {}
}m[26];
stack<Matrix> s;
int main(){
    #ifdef DEBUG
    freopen("6.3.in","r",stdin);
    #endif
    int n;
    scanf("%d\r",&n);
    for(int i=0;i<n;i++){
        char s0[10];
        char c;
        scanf("%c ",&c);
        s0[0]=c;
        scanf("%d %d\r\n",&m[s0[0] -A].a, &m[s0[0] -A].b);
        //printf("%c %d %d\r\n",s0[0] , m[s0[0] -‘A‘].a , m[s0[0]-‘A‘].b);
    }
    while(scanf("%s",exps)==1){
        int sum=0;
        int len=strlen(exps);
        int ok=1;
        for(int i=0;i<len;i++){
            if(isalpha(exps[i])){
                s.push(m[exps[i]-A]);
             //  printf("push %d %d \n",m[exps[i]-‘A‘].a,m[exps[i]-‘A‘].b);
            }
            else if(exps[i]==)){
                Matrix m2 = s.top(); s.pop();
            //    printf("pop %d %d \n", m2.a, m2.b);
                Matrix m1 = s.top(); s.pop();
             //   printf("pop %d %d \n", m1.a, m1.b);
                if(m1.b != m2.a){ok=0;break;}
                sum+= m1.a * m1.b * m2.b;
                s.push(Matrix(m1.a, m2.b));
             //  printf("push %d %d \n",m1.a, m2.b,);
            }
        }
        if(ok)printf("%d\n",sum);
        else printf("error\n");
    }
    return 0;
}

 

例题6-3 Matrix Chain Multiplication ,Uva 442

标签:

原文地址:http://www.cnblogs.com/Wade-/p/5745579.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!