矩阵连乘 /// 区间DP oj1900
1
4
50 10
10 40
40 30
30 5
10500
理论讲解
https://www.cnblogs.com/Jason-Damon/p/3231547.html
https://blog.csdn.net/wangmengmeng99/article/details/50134673
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int a[],dp[][];
//int pre[55][55];
// /* pre[i][j]=k 即 i到j之间由k断开
// 借此输出最小乘数的表达式 */
//void print_chain(int i, int j)
//{ // 递归输出最小连乘的表达式
// if (i==j) printf("矩阵%d",i);
// else
// {
// printf("(");
// print_chain(i,pre[i][j]);
// printf("*");
// print_chain(pre[i][j]+1,j);
// printf(")");
// }
//}
int main()
{
int t;
while(~scanf("%d",&t))
{
while(t--)
{
int n; scanf("%d",&n);
for(int i=;i<=n;i++)
{
int p,q; scanf("%d%d",&p,&q);
if(i==) a[]=p; a[i]=q;
} // 第一个存行和列 之后的只存列 //memset(pre,0,sizeof(pre));
memset(dp,INF,sizeof(dp)); // 初始化无穷大
for(int i=;i<=n;i++) dp[i][i]=;
/// 只有本身一个矩阵时 矩阵乘积为0 for(int i=;i<=n;i++) /// 枚举矩阵个数 由从小推大
for(int l=;l<=n-i+;l++) /// 枚举左端下标
{
int r=l+i-; // 根据个数 得到右端下标
dp[l][r]=dp[l+][r]+a[l-]*a[l]*a[r];
/// dp[l][r]视为 l矩阵*(dp[l+1][r])矩阵
//pre[l][r]=l; for(int k=l+;k<r;k++)
dp[l][r]=min(dp[l][r],
dp[l][k]+dp[k+][r]+a[l-]*a[k]*a[r]);
/// dp[l][r]视为 (dp[l][k])矩阵*(dp[k+1][r])矩阵 // 当需要记录 pre[][] 时
// {
// int tmp=dp[l][k]+dp[k+1][r]+a[l-1]*a[k]*a[r];
// if(tmp<dp[l][r]) dp[l][r]=tmp, pre[l][r]=k;
// }
}
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=n;j++)
// printf("%d ",pre[i][j]);
// // printf("%d ",dp[i][j]);
// printf("\n");
// }
// print_chain(1,n); // 最小连乘表达式
// printf("\n");
printf("%d\n",dp[][n]); // 最小连乘次数
}
} return ;
}
矩阵连乘 /// 区间DP oj1900的更多相关文章
- POJ 1651 Multiplication Puzzle(类似矩阵连乘 区间dp)
传送门:http://poj.org/problem?id=1651 Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65536K T ...
- 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】
算法提高 矩阵乘法 时间限制:3.0s 内存限制:256.0MB 问题描述 有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要 ...
- 蓝桥杯:矩阵乘法(区间DP)
http://lx.lanqiao.cn/problem.page?gpid=T417 题意:…… 思路:n=1000,一开始觉得区间DP会超时,后来想不到其他做法就这样做了,居然没超时. 状态转移: ...
- tyvj 1198 矩阵连乘——区间dp
tyvj 1198 矩阵连乘 题目描述 一个n*m矩阵由n行m列共n*m个数排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵,运算 ...
- POJ1651 Multiplication Puzzle —— DP 最优矩阵链乘 区间DP
题目链接:https://vjudge.net/problem/POJ-1651 Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65 ...
- 算法提高 矩阵乘法 区间DP
这是神题,n <= 1000,如果是极限数据普通的n^3区间DP怎么可能过?可偏偏就过了. 刘汝佳大哥的训练指南上面说的存在nlgn的算法解决矩阵链乘问题,可是百度都找不到.... AC代码 # ...
- [jdoj1090]矩阵_区间dp
矩阵 jdoj-1910 题目大意:给你连续的n个矩阵的长和宽,保证每连续的两个相邻矩阵满足相乘的条件,不能改变题目中矩阵的位置,求将这些矩阵相乘为一个矩阵的最小乘法次数. 注释:1<=n< ...
- P1005 矩阵取数游戏[区间dp]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后 ...
- 区间dp复习 之 tyvj 1198 矩阵连乘
题目描述 一个\(n*m\)矩阵由\(n\)行\(m\)列共\(n*m\)个数排列而成.两个矩阵\(A\)和\(B\)可以相乘当且仅当\(A\)的列数等于\(B\)的行数.一个\(N*M\)的矩阵乘以 ...
随机推荐
- 廖雪峰Java13网络编程-1Socket编程-2TCP编程
1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据 ...
- 「题解」:07.16NOIP模拟T1:礼物
问题 A: 礼物 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼 ...
- Android中的Parcel机制(下)
上一篇中我们透过源码看到了Parcel背后的机制,本质上把它当成一个Serialize就可以了,只是它是在内存中完成的序列化和反序列化,利用的是连续的内存空间,因此会更加高效. 我们接下来要说的是Pa ...
- GDI+用PNG图片做半透明异型窗口
http://hi.baidu.com/bluew/blog/item/2ecbe58bf93a937d9f2fb4de.html2007-08-09 00:52 我是用PNG图片Alpha透明的方式 ...
- CentOS下安装Lua
Lua是一种轻量小巧的脚本语言,用标准 C语言编写并以源代码形式开放,其设计目的是 为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.官网: http://www.lua.org/ 安装过 ...
- CF696B Puzzles(期望dp)
传送门 解题思路 比较有意思的一道题.首先假如这个点\(x\)只有\(1\)个儿子\(u\),那么显然可得\(dp[u]=dp[x]+1\).继续如果多加一个儿子\(p\),那么\(p\)在\(u\) ...
- NX二次开发-UFUN读取工程图注释UF_DRF_ask_text_data
1 NX11+VS2013 2 3 4 #include <uf.h> 5 #include <uf_ui.h> 6 #include <uf_drf.h> 7 8 ...
- CodeForces 1166C A Tale of Two Lands
题目链接:http://codeforces.com/problemset/problem/1166/C 题目大意 给定 n 个数,任选其中两个数 x,y,使得区间 [min(|x - y|, |x ...
- 剑指offer——02二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- iOS开发系列-weak与unsafe_unretained修饰符
概述 在iOS内存管理中,为防止循环引用,定义类的内部对象属性使用weak.unsafe_unretained修饰符,不产生强引用. 开发中一般使用的weak修饰符,那么接下来说下weak跟unsaf ...