矩阵连乘积 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题目做了下对比,你比如说猴子堆 ...
随机推荐
- [Effective JavaScript 笔记]第19条:熟练掌握高阶函数
高阶函数介绍 高阶函数曾经是函数式编程的一个概念,感觉是很高深的术语.但开发简洁优雅的函数可以使代码更加简单明了.过去几年中脚本语言采用了这些个技术,揭开了函数式编程的最佳惯用法的神秘面纱.高阶函数就 ...
- centos7下cups + samba共打印服务的教程
centos7系统我们用到的不多但是这款系统比centos6功能要强大了不少,下文来介绍一篇centos7下cups + samba,共打印服务的例子,具体如下所示. 这个算是rhce课程的篇外篇 ...
- 运行hexo提示/usr/bin/env: node: 没有那个文件或目录
由于Ubuntu下已经有一个名叫node的库,因此Node.js在ubuntu下默认叫nodejs,需要额外处理一下. 这个时候需要人为的建立链接,很简单一句话即可! sudo ln -s `whic ...
- HDOJ 1075
字典树 9890974 2013-12-25 15:31:06 Accepted 1075 468MS 59832K 1342 B G++ 泽泽 #include<stdio.h> #in ...
- 【Python】Python AES 对称加密示例
代码: import sys from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex AES_SECRET_KEY = ...
- 【Spring】Spring系列1之Spring概述
概述
- js 猜数字游戏
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【JAVA、C++】LeetCode 020 Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- HDU 3833 YY's new problem ()
YY's new problem Time Limit: 12000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- Servlet之Cookie操作
Java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题. 1,建立一个无生命周期的cookie,即随着浏览器的关 ...