Advertisement
juanjo12x

UVA_348_Optimal_Matrix_Multiplication

Aug 6th, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <string>
  6. #include <cctype>
  7. #include <stack>
  8. #include <queue>
  9. #include <list>
  10. #include <vector>
  11. #include <map>
  12. #include <set>
  13. #include <sstream>
  14. #include <limits.h>
  15. #include <stdlib.h>
  16. #include <cmath>
  17. #define LL unsigned long long
  18. using namespace std;
  19. int n;
  20. typedef struct m{
  21.          int r;
  22.         int c;
  23. }Tmat;
  24. Tmat arr[15];int s[15][15]; int B[15][15];
  25. int cont=1;
  26. int Imprimir(int i,int j){
  27.     int aux=s[i][j];
  28.     if(i==j){
  29.         printf("A%d",i);
  30.     }else{
  31.         printf("(");Imprimir(i,aux);printf(" x ");
  32.        
  33.         Imprimir(aux+1,j);
  34.         printf(")");
  35.     }
  36.        
  37. }
  38. int main() {
  39.     int j;int q;int aux;int r,c;
  40.      while(scanf("%d",&n)){
  41.         if(n==0) break;
  42.         for(int i=1;i<=n;i++){
  43.             scanf("%d %d",&r,&c);
  44.             arr[i].r=r;arr[i].c=c;
  45.            
  46.         }
  47.        
  48.         memset(s,0,sizeof(s[0][0])*15*15);
  49.         memset(B,0,sizeof(B[0][0])*15*15);
  50.        
  51.         for (int i=1;i<=n;i++){
  52.             B[i][i]=0;
  53.         }
  54.         for (int l=2;l<=n;l++){
  55.             for(int i=1;i<=n-l+1;i++){
  56.                 j=i+l-1;
  57.                 B[i][j]=INT_MAX;
  58.                 for(int k=i;k<=j-1;k++){
  59.                     q=B[i][k]+ B[k+1][j]+ (arr[i].r*arr[k].c*arr[j].c);
  60.                     if(q<B[i][j]){
  61.                         B[i][j]=q;
  62.                         s[i][j]=k;
  63.                     }
  64.                 }
  65.             }
  66.         }
  67.         aux=1;
  68.         printf("Case %d: ",cont);cont++;
  69.         Imprimir(aux,n); printf("\n");
  70.        
  71.      }
  72.    
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement