链接:http://acmoj.shu.edu.cn/problem/24/

分析:设\(dp[i][j]\)为矩阵\(A[i:j]\)所需的最少乘法次数,则有dp方程:\(dp[i][j]=min\{dp[i][k]+dp[k+1][j]\}(i\leq k <j)\),当\(i=j\)时,\(dp[i][j]=0\).

则可以递归求解该问题,递归终止的条件是\(i=j\),自底向上地解决问题。枚举\([i,j)\)之间的每个k,并取其最小值。

因为该题需要输出解决方案,所以求解时,若\(dp[i][j] = dp[i][k]+dp[k+1][j]\),则用数组\(path[i][j]\)记录下这个k。

输出结果时,仍采用递归的方式,将一个括号内的视作一个子结构,递归终止的条件是区间中的元素仅有一个,此时打印单个矩阵。注意除了最外层的区间不用输出括号,加特判即可。

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e2+5;
const int INF=0x3f3f3f3f;
typedef long long LL;
int a[maxn],b[maxn];
LL dp[maxn][maxn];
int path[maxn][maxn];
int n;
int dfs(int i,int j)
{
LL &ans=dp[i][j];
if(ans<INF) return ans;
if(i==j) return ans=0;
for(int k=i;k<j;k++){
int tmp=dfs(i,k)+dfs(k+1,j)+a[i]*b[k]*b[j]; //递归求解
if(tmp<ans){
ans=tmp; //不断更新最小值和其路径
path[i][j]=k;
}
}
return ans;
} void print(int i,int j)
{
if(i==j){ //递归终止
printf("A%d",i); //输出独立矩阵
return;
}
if(i>1||j<n) printf("("); //最外层不要括号
print(i,path[i][j]); //递归进入子区间
print(path[i][j]+1,j);
if(i>1||j<n) printf(")"); //最外层不要括号
} int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int cas=0;
while(scanf("%d",&n)==1){
for(int i=1;i<=n+1;i++){
scanf("%d",&a[i]);
if(i>1) b[i-1] = a[i]; //后一个矩阵的行数等于前一个矩阵的列数
}
memset(dp,INF,sizeof(dp)); //初值置无穷大
memset(path,0,sizeof(path)); //路径
dp[1][n]=dfs(1,n);
printf("Case %d\n",++cas);
printf("%lld ",dp[1][n]);
print(1,n);
printf("\n");
}
return 0;
}

SHUOJ - 算法题1 矩阵连乘问题(区间dp)的更多相关文章

  1. P1005 矩阵取数游戏[区间dp]

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后 ...

  2. P1005 矩阵取数游戏 区间dp 高精度

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...

  3. 1166 矩阵取数游戏[区间dp+高精度]

    1166 矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description [ ...

  4. ZOJ 1276 "Optimal Array Multiplication Sequence"(最优矩阵链乘问题+区间DP)

    传送门 •题意 矩阵 A(n×m) 和矩阵 B(m×k) 相乘,共做 n×m×k 次乘法运算: 给你 n 个矩阵,求这 n 个矩阵的最优结合方式,使得做的总乘法运算次数最少: •题解 定义dp(i,j ...

  5. 最优矩阵连乘问题 区间DP

    最优矩阵连乘积 Accepted: 10 Total Submit: 18Time Limit: 1000ms Memony Limit: 32768KB Description 在科学计算中经常要计 ...

  6. Good Vegetable 4级算法题 分值: [320/3120] 问题: [8/78]

    1523 非回文 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个字符串是非回文的,当且仅当,他只由前p个小写字母 ...

  7. 面试必备:高频算法题终章「图文解析 + 范例代码」之 矩阵 二进制 + 位运算 + LRU 合集

    Attention 秋招接近尾声,我总结了 牛客.WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对.测试.欢迎食用 本 ...

  8. 经典算法题每日演练——第十七题 Dijkstra算法

    原文:经典算法题每日演练--第十七题 Dijkstra算法 或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划” 这些经典 ...

  9. 经典算法题每日演练——第十六题 Kruskal算法

    原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...

随机推荐

  1. Run time setting设置详解

    Pacing转载自belie 1>     Run time setting设置中的Browser:‘Simulate a new user on each iteration’选项例如:录制了 ...

  2. jhipster(springboot+datatable+jpa)后台分页,总结

    最近用datatable做了一个后台分页,但是后台实体原本没写DTO.就碰到的问题做了一下总结 一.datatable使用get方式传数据到后台,这是正常的后台分页,不涉及过滤查询和前端传递的排序字段 ...

  3. XCODE5 真机測试

    原文地址: http://my.oschina.net/u/1245365/blog/196420  亲測 可用 ios申请真机调试( xcode 5)具体解析 摘要 我们做ios项目时.模拟器仅仅能 ...

  4. 《Shiro框架》shiro学习中报错解决方法

    [1] 最近在学习shiro,在学习过程中出现了一个问题,报错如下: org.apache.shiro.UnavailableSecurityManagerException: No Security ...

  5. Ubuntu 16.04 安装 Gnome 桌面环境

    个人博客链接:Ubuntu 16.04 安装 Gnome 桌面环境

  6. Action请求流程分析

    Strut2流程分析-----从请求到Action方法() 首先请求会调用strutsPrepareAndExcuteFliter----(这个就是我们在web.xml文件中所配置的那个拦截器吧,所有 ...

  7. Hadoop伪分布安装详解(四)

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

  8. 2018-2019-1 20165330 《信息安全系统设计基础》第六周课上测试ch02&课下作业

    课上测试 测试-3-ch02 任务详情 编写一个程序 "week0203学号.c",运行下面代码: 1 short int v = -学号后四位 2 unsigned short ...

  9. greenplum-cc-web4.0监控安装

    简介: 本文是基于greenplum5.7,greenplum-cc-web4.0安装的. 一.安装greenplum监控的数据库以及创建用户(在gpadmin用户下安装) 1.开启greenplum ...

  10. 隐藏UITableView当没有数据或数据不够的时候出现的分割线.

    在没有分割先的情况下,添加如下方法,当实例化tableview的时候调用该方法. - (void)setExtraCellLineHidden: (UITableView *)tableView{ U ...