请各位用动态规划的方法帮忙编三个C语言的程序,一个是完全加括号的矩阵连乘积,一个是0—1背包问题,还有一个就是斐波那契数列。我在这里先谢谢各位的帮忙了!
完全加括号的矩阵连乘积是这样的:给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。
将矩阵连乘积AiAi+1……Aj简记为A[i:j] ,这里i≤j.
考察计算A[i:j]的最优计算次序。设这个计算次序在矩阵Ak和Ak+1之间将矩阵链断开,i≤k<j,则其相应完全加括号方式为(AiAi+1……Ak)(Ak+1Ak+2……Aj)计算量:A[i:k]的计算量加上A[k+1:j]的计算量,再加上A[i:k]和A[k+1:j]相乘的计算量
其算法为:
void matrixChain(int p[ ], int m[ ][ ], int s[ ][ ] )
   {
      int n=p.length-1;
      for (int i = 1; i <= n; i++) m[i][i] = 0;
      for (int r = 2; r <= n; r++)
         for (int i = 1; i <= n - r+1; i++) {
            int j=i+r-1;
            m[i][j] = m[i+1][j]+ p[i-1]*p[i]*p[j];
            s[i][j] = i;
            for (int k = i+1; k < j; k++) {
               int t = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
               if (t < m[i][j]) {  m[i][j] = t;   s[i][j] = k;}
               }
            }
   }