Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- int b[1000];
- int mat[1000][1000];
- int contador = 0;
- int m(int i, int j);
- void inicializar_matriz();
- void imprimir(int n);
- int main()
- {
- int n;
- inicializar_matriz();
- printf("Informe a quantidade de matrizes: ");
- scanf("%d", &n);
- printf("Informe as dimensoes das matrizes: ");
- for(int i = 0; i <= n; i++)
- {
- scanf("%d", &b[i]);
- }
- printf("Menor numero de op: %d\n", m(1, n) );
- printf("Contador %d\n", contador);
- imprimir(n);
- }
- void inicializar_matriz()
- {
- for(int i = 1; i < 1000; i++)
- {
- for(int j = 1; j < 1000; j++)
- {
- mat[i][j] = 0;
- }
- }
- }
- int m(int i, int j)
- {
- contador = contador + 1;
- if(i <= j)
- {
- if(i == j)
- {
- return(0);
- }
- int aux;
- if(mat[i][i] == 0)
- {
- mat[i][i] = m(i, i);
- }
- //printf("mat[i][i] %d %d : %d\n", i, i, mat[i][i]);
- if(mat[i+1][j] == 0)
- {
- mat[i+1][j] == m(i+1, j);
- }
- //printf("mat[i+1][j] %d %d : %d\n", i + 1, j, mat[i + 1][j]);
- mat[i][j] = mat[i][i] + mat[i+1][j] + b[i-1] * b[i] * b[j];
- //printf("mat[i][j] %d %d : %d\n",i, j , mat[i][j]);
- for(int k = i + 1; k < j; k++)
- {
- if(mat[i][k] == 0)
- {
- mat[i][k] = m(i, k);
- }
- //printf("mat[i][k] %d %d : %d\n", i, k , mat[i][k]);
- if(mat[k+1][j] == 0)
- {
- mat[k+1][j] = m(k+1, j);
- }
- //printf("mat[k+1][j] %d %d : %d\n", k+1, j, mat[k+1][j]);
- aux = mat[i][k] + mat[k+1][j] + b[i - 1] * b[k] * b[j] ;
- if( aux < mat[i][j])
- {
- mat[i][j] = aux;
- }
- //printf("mat[i][j] %d %d : %d\n", i, j , mat[i][j]);
- }
- return(mat[i][j]);
- }
- return(0);
- }
- void imprimir(int n)
- {
- for(int i = 1; i <=n; i++)
- {
- for(int j = 1; j <=n; j++)
- {
- printf("%d ", mat[i][j]);
- }printf("\n");
- }printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement