矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
题目传送门
/*
题意:加上适当的括号,改变计算顺序使得总的计算次数最少
矩阵连乘积问题,DP解决:状态转移方程:
dp[i][j] = min (dp[i][k] + dp[k+1][j] + p[i-1] * p[k] * p[j]) (i<=k<j)
s[i][j] 记录断开的地方(即加括号的位置),回溯法输出结果
*/
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std; const int MAXN = 1e2 + ;
const int INF = 0x3f3f3f3f;
int dp[MAXN][MAXN];
int s[MAXN][MAXN];
int p[MAXN];
int n; void print(int i, int j)
{
if (i == j) printf ("A%d", i);
else
{
printf ("(");
print (i, s[i][j]);
printf (" x ");
print (s[i][j] + , j);
printf (")");
}
} void work(void)
{
for (int i=; i<=n; ++i) dp[i][i] = ;
for (int l=; l<=n; ++l)
{
for (int i=; i<=n-l+; ++i)
{
int j = i + l - ;
dp[i][j] = INF;
for (int k=i; k<=j-; ++k)
{
int tmp = dp[i][k] + dp[k+][j] + p[i-] * p[k] * p[j];
if (tmp < dp[i][j])
{
dp[i][j] = tmp; s[i][j] = k;
}
}
}
} print (, n); puts ("");
} int main(void) //ZOJ 1276 Optimal Array Multiplication Sequence
{
//freopen ("ZOJ_1276.in", "r", stdin); int cas = ;
while (scanf ("%d", &n) == )
{
if (n == ) break;
for (int i=; i<=n; ++i) scanf ("%d%d", &p[i-], &p[i]); printf ("Case %d: ", ++cas);
work ();
} return ;
} /*
Case 1: (A1 x (A2 x A3))
Case 2: ((A1 x A2) x A3)
Case 3: ((A1 x (A2 x A3)) x ((A4 x A5) x A6))
*/
矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence的更多相关文章
- ZOJ 1276 Optimal Array Multiplication Sequence(矩阵连乘)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1276 裸的矩阵连乘问题. #include<iostream> ...
- ZOJ 1276 "Optimal Array Multiplication Sequence"(最优矩阵链乘问题+区间DP)
传送门 •题意 矩阵 A(n×m) 和矩阵 B(m×k) 相乘,共做 n×m×k 次乘法运算: 给你 n 个矩阵,求这 n 个矩阵的最优结合方式,使得做的总乘法运算次数最少: •题解 定义dp(i,j ...
- 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个矩阵 ...
- UVA - 348Optimal Array Multiplication Sequence(递推)
id=19208">题目:Optimal Array Multiplication Sequence 题目大意:给出N个矩阵相乘.求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘 ...
- 矩阵乘法 --- hdu 4920 : Matrix multiplication
Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- 线性代数(矩阵乘法):POJ 2778 DNA Sequence
DNA Sequence Description It's well known that DNA Sequence is a sequence only contains A, C, T and ...
- python 有关矩阵行列的存取 np.array
初始化 a = range() a = np.array(a) a = a.reshape(,) a [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 ...
- ACM解题之(ZOJ 1094) Matrix Chain Multiplication
题目来源: 点击打开链接 题目翻译: 矩阵乘法问题是动态规划的典型例子. 假设你必须评估一个表达式,如A * B * C * D * E,其中A,B,C,D和E是矩阵.由于矩阵乘法是关联的,乘法运算的 ...
- ZOJ 1276 DP
给出一系列的1x2的矩阵,要你求出矩阵以什么样的次序相乘才使得相乘次数最少,.(不用排序,只要决定该矩阵是和前面相乘比较好,还是后面). 今天仔细想了一下,跟之前做的DP题目做了下对比,你比如说猴子堆 ...
随机推荐
- 机器学习公开课笔记(4):神经网络(Neural Network)——表示
动机(Motivation) 对于非线性分类问题,如果用多元线性回归进行分类,需要构造许多高次项,导致特征特多学习参数过多,从而复杂度太高. 神经网络(Neural Network) 一个简单的神经网 ...
- XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析
2011年6月28日晚,新浪微博遭遇到XSS蠕虫攻击侵袭,在不到一个小时的时间,超过3万微博用户受到该XSS蠕虫的攻击.此事件给严重依赖社交网络的网友们敲响了警钟.在此之前,国内多家著名的SNS网站和 ...
- java类加载器
1.什么是类加载器?类加载器实现什么功能? 类加载器(Class Loader)是用来加载java类到java虚拟机(JVM)中,加载步骤: java编译器编译java源文件(*.java文件)成字节 ...
- [Effective JavaScript 笔记]第17条:间接调用eval函数优于直接调用
eval函数不仅仅是一个函数.大多数函数只访问定义它们所在的作用域,而不能访问除此之外的作用域(词法作用域).eval函数具有访问调用它时的整个作用域的能力.编译器编写者首次设法优化js时,eval函 ...
- sort如何按指定的列排序
<1>[root@localhost company]# cat test 06d7 145 4192542506e1 ...
- 【分布式存储】GlusterFS failing to mount at boot with Ubuntu 14.04
GlusterFS failing to mount at boot with Ubuntu 14.04 Previously I asked about mounting GlusterFS a ...
- Hibernate与 MyBatis的比较
希望大家指出不对之处. 第一章 Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分. Myb ...
- A + B Problem
Write a function that add two numbers A and B. You should not use + or any arithmetic operators. 分析: ...
- NEFU 2016省赛演练一 I题 (模拟题)
这题没名字 Problem:I Time Limit:2000ms Memory Limit:65535K Description Now give you an interger m and a s ...
- LINUX下安装TeamViewer
https://www.teamviewer.com/zhcn/download/linux/ [root@ok teamviewer]# yum install -y teamviewer_11.0 ...