传送门

•题意

  矩阵 A(n×m) 和矩阵 B(m×k) 相乘,共做 n×m×k 次乘法运算;

  给你 n 个矩阵,求这 n 个矩阵的最优结合方式,使得做的总乘法运算次数最少;

•题解

  定义dp(i,j)表示第[i,...j]个矩阵的最小的乘法运算次数;

  定义d(i,j)表示第[i,...j]个矩阵的最优解从d(i,j)分开,即(Ai×Ai+1×......×Ad(i,j))×(Ad(i,j)+1×......×Aj);

  求解dp(i,j)的时候,求出最优解,并记录是从那个位置分开使得其最优;

  输出时递归输出即可;

•Code

 #include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn=; int n;
int p[maxn];
int dp[maxn][maxn];
int d[maxn][maxn]; void DP()
{
for(int len=;len <= n;++len)
{
for(int i=,j=i+len-;j <= n;++i,++j)
{
for(int k=i;k < j;++k)
{
int cur=dp[i][k]+dp[k+][j]+p[i-]*p[k]*p[j];
if(dp[i][j] > cur)
{
d[i][j]=k;
dp[i][j]=cur;
}
}
}
}
}
void Print(int l,int r)
{
if(l == r)
{
printf("A%d",l);
return ;
}
if(l > r)
return ; printf("(");
Print(l,d[l][r]);///[l,r]在d[l][r]处分割
printf(" x ");
Print(d[l][r]+,r);
printf(")");
}
void Solve()
{
for(int i=;i <= n;++i)
for(int j=;j <= n;++j)
dp[i][j]=(i == j ? :INF);
DP();
Print(,n);
printf("\n");
}
int main()
{
int kase=;
while(~scanf("%d",&n) && n)
{
for(int i=;i <= n;++i)///第i个矩阵的行和列为p[i-1],p[i]
{
int a,b;
scanf("%d%d",&a,&b);
p[i-]=a;
p[i]=b;
}
printf("Case %d: ",kase++);
Solve();
}
return ;
}

ZOJ 1276 "Optimal Array Multiplication Sequence"(最优矩阵链乘问题+区间DP)的更多相关文章

  1. 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence

    题目传送门 /* 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 矩阵连乘积问题,DP解决:状态转移方程: dp[i][j] = min (dp[i][k] + dp[k+1][j] + p[ ...

  2. ZOJ 1276 Optimal Array Multiplication Sequence(矩阵连乘)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1276 裸的矩阵连乘问题. #include<iostream> ...

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

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

  4. UVAoj 348 - Optimal Array Multiplication Sequence

    /* 题意:矩阵相乘的最少的步数 dp[i][j]=min(dp[i][j], dp[i][k]+dp[k+1][j]+num[i-1]*num[k]*num[j]); 表示的是第i个矩阵到第j个矩阵 ...

  5. UVA - 348Optimal Array Multiplication Sequence(递推)

    id=19208">题目:Optimal Array Multiplication Sequence 题目大意:给出N个矩阵相乘.求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘 ...

  6. POJ1651 Multiplication Puzzle —— DP 最优矩阵链乘 区间DP

    题目链接:https://vjudge.net/problem/POJ-1651 Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65 ...

  7. UVa 10003 切木棍(区间DP+最优矩阵链乘)

    https://vjudge.net/problem/UVA-10003 题意: 有一根长度为L的棍子,还有n个切割点的位置.你的任务是在这些切割点的位置处把棍子切成n+1部分,使得总切割费用最小.每 ...

  8. POJ 1141 Brackets Sequence(区间DP, DP打印路径)

    Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...

  9. POJ 1651 区间DP Multiplication Puzzle

    此题可以转化为最优矩阵链乘的形式,d(i, j)表示区间[i, j]所能得到的最小权值. 枚举最后一个拿走的数a[k],状态转移方程为d(i, j) = min{ d(i, k) + d(k, j) ...

随机推荐

  1. Django中blank和NULL

    当我们在django中添加一个数据库字段时,我们通常会写models.CharField(max_length = 100,null = True,blank = True).用ForeignKey, ...

  2. 简单的Jquery焦点图切换效果

    利用Jquery,优雅的实现焦点图切换 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  3. hdu5442 Favorite Donut 后缀数组 长春网赛

    wa从一点到晚上11点没停过,也不知道为什么错,第二天换了个思路做,终于过了.这题还是有点问题的,数据有点水,我看到有人贴的代码baabbaab这组数据是4 0,明显错的,但是却可以过. 下面的是我第 ...

  4. Ecplise中Junit4单元测试的基本用法

    看了一些Junit4的视频,简单了解了Junit4的一些基本用法,整理记录一下. 环境搭建 这里使用的开发工具是MyEclipse,首先新建一个Java工程,将Junit4的jar包引入,eclips ...

  5. DirectX11 With Windows SDK--07 添加光照与常用几何模型、光栅化状态

    原文:DirectX11 With Windows SDK--07 添加光照与常用几何模型.光栅化状态 前言 对于3D游戏来说,合理的光照可以让游戏显得更加真实.接下来会介绍光照的各种分量,以及常见的 ...

  6. 洛谷P4126 [AHOI2009]最小割

    题目:洛谷P4126 [AHOI2009]最小割 思路: 结论题 在残余网络上跑tarjan求出所有SCC,记id[u]为点u所在SCC的编号.显然有id[s]!=id[t](否则s到t有通路,能继续 ...

  7. php7 新内容

    1.use增强 以thinkphp5.0为例 namespace app\home\controller;use think\{Loader,Controller,Captcha,Request}; ...

  8. 2019-10-18-dotnet-文件读写务必注意事项

    title author date CreateTime categories dotnet 文件读写务必注意事项 lindexi 2019-10-18 08:42:53 +0800 2019-10- ...

  9. python 编码检测工具——chardet

  10. Kubernetes1.4新特性前瞻:设置JOB执行计划

    (一)  核心概念 Kubernetes在新版中会新增了一个设置JOB执行计划的功能,在1.3中已经可以初见端倪了,从进度上来看会在1.4版本中进行发布,下面我们先睹为快. Kubernetes通过这 ...