zoukankan      html  css  js  c++  java
  • NYOJ 536 开心的mdd【矩阵链乘】

    题意:给出n个矩阵组成的序列,问最少的运算量

    看的紫书: dp[i][j]表示从第i个矩阵到第j个矩阵最少的乘法次数

    dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+p[i-1]*p[k]*p[j]);

    边界条件为dp[i][i]=0,因为从一个矩阵自己到它自己不需要做乘法 然后把dp[i][j]初始化为一个极大的值,再来求最小值

    学习的这一篇:http://blog.csdn.net/dgq8211/article/details/7492186

    还有这一篇:http://blog.csdn.net/u012804490/article/details/26152337

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 #define mod=1e9+7;
    12 using namespace std;
    13 
    14 
    15 typedef long long LL;
    16 const int maxn=105;
    17 const int INF = 0x7fffffff;
    18 int dp[maxn][maxn],p[maxn];
    19 
    20 int main(){
    21     int n,i,j,ans,k,len;
    22     while(scanf("%d",&n)!=EOF&&n){
    23         for(i=1;i<=n;i++) cin>>p[i-1]>>p[i];
    24         
    25         memset(dp,0,sizeof(dp));
    26         
    27         for(len=1;len<n;len++){ //连乘的矩阵的长度 
    28             for(i=1;i<=n-len;i++){ //连乘的矩阵的起点 
    29                 j=i+len; 
    30                 dp[i][j]=INF;
    31                 for(k=i;k<j;k++){ //连乘的矩阵的终点 
    32                     dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+p[i-1]*p[k]*p[j]);
    33                   //  printf("dp[%d][%d]=%d
    ",i,j,dp[i][j]);
    34                 }                
    35             }
    36         }
    37         printf("%d
    ",dp[1][n]);        
    38     }
    39     return 0;
    40 }
    View Code

    go---go---go-

  • 相关阅读:
    python简介
    Error:unknown filesystem
    Ubuntu 12.04 相关问题
    C/C++版数据结构之链表<一>
    C/C++版数据结构之链表<二>
    C/C++版数据结构之树<二>
    C/C++版数据结构之树<一>
    C/C++版数据结构之链表<三>
    C/C++版数据结构之排序算法
    php 操作文件简单例子
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4379300.html
Copyright © 2011-2022 走看看