zoukankan      html  css  js  c++  java
  • hlg1600线性代数中的矩阵问题【区间dp】

    大意:

    告诉你n个矩阵的行数和列数

    比如说

    3

    2 3 4 5

    代表有3个矩阵第一个矩阵2 * 3  第二个矩阵 3 * 4 第三个矩阵4 * 5  

    并且知道只有连续的矩阵才可以相乘

    问最后相乘的次数最少是多少

    分析:

    用区间dp可以做

    每次递归调用的时候枚举每个分割点

    最后加上附带的价值即可

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 const int maxn = 105;
     7 const int INF = 1000000000;
     8 
     9 int dp[maxn][maxn];
    10 int a[maxn];
    11 
    12 int ddp(int i, int j) {
    13     if(dp[i][j] != -1) return dp[i][j];
    14     if(i + 1 == j) {
    15         return  dp[i][j] = 0;
    16     }
    17     int Min = INF;
    18     for(int k = i + 1; k < j; k++) {
    19         Min = min(Min , ddp(i, k) + ddp(k, j) + a[i] * a[k] * a[j]);
    20     }
    21     return dp[i][j] = Min;
    22 }
    23 
    24 int main() {
    25     int t;
    26     int n;
    27     scanf("%d",&t);
    28     while(t--) {
    29         scanf("%d",&n);
    30         for(int i = 1; i <= n + 1; i++) {
    31             scanf("%d",&a[i]);
    32         }
    33         if(n == 1) {
    34             puts("0");
    35             continue;
    36         }
    37         memset(dp, -1, sizeof(dp));
    38         printf("%d
    ", ddp(1, n + 1));
    39 //        for(int i = 1; i <= n + 1; i++) {
    40 //            for(int j =1; j <= n + 1; j++) {
    41 //                printf("%d %d %d
    ", i, j, dp[i][j]);
    42 //            }
    43 
    44     }
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    Textarea自适应文字内容调整高度
    把页面某内容放入粘贴板中
    通过javamail发送电子邮件
    Jrebel+tomcat实现热部署
    Eclipse启动Tomcat时,45秒超时解决方式
    mybatis 多对多 处理
    单例模式
    Centos6安装mysql5.7
    maven手动导入jar包到本地仓库
    Jsp与servlet本质上的区别
  • 原文地址:https://www.cnblogs.com/zhanzhao/p/3982247.html
Copyright © 2011-2022 走看看