UVA442 矩阵链乘 Matrix Chain Multiplication
题意:
这道题也是在不改变原序列每个元素位置的前提下,看每个元素与他身边的两个元素那个先结合能得到最大的能量
题解:
很明显这是一道区间dp的题目,这道题要断环成链,这道题需要考虑在这个区间上某个元素先与那个元素结合更好,而如果我们采用了区间dp的模板,那么我们就在dp中不用考虑某个元素先于左右那个结合,因为区间dp的模板已经做到了这一点
i是起点,j是终点,k就是枚举父区间是由哪两个子区间合并而成的
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+v[i]*v[k+1]*v[j+1])
但是最后的结果要在dp过程中取最大值,因为我们dp的最终长度是n,但是这个起点位置不是确定的,所以我们要用一个变量来取最大值
代码:
1 #include<cstdio>
2 #include<cstring>
3 #include<iostream>
4 #include<algorithm>
5 #include<vector>
6 #include<queue>
7 using namespace std;
8 typedef long long ll;
9 const int maxn=2005;
10 const int INF=0x3f3f3f3f;
11 int dp[maxn][maxn],v[maxn],w[maxn];
12 int main()
13 {
14 int n;
15 scanf("%d",&n);
16 for(int i=1;i<=n;++i)
17 {
18 scanf("%d",&v[i]);
19 v[n+i]=v[i];
20 }
21 v[2*n+1]=v[1];
22 int maxx=0;
23 for(int i=2;i<=n;++i)
24 {
25 for(int j=1;j+i<=2*n+1;++j)
26 {
27 int ends=j+i-1;
28 for(int k=j;k<ends;++k)
29 {
30 dp[j][ends]=max(dp[j][ends],dp[j][k]+dp[k+1][ends]+v[j]*v[k+1]*v[ends+1]);
31 }
32 maxx=max(maxx,dp[j][ends]);
33 }
34 }
35 printf("%d\n",maxx);
36 return 0;
37 }
UVA442 矩阵链乘 Matrix Chain Multiplication的更多相关文章
- UVa 442 Matrix Chain Multiplication(矩阵链,模拟栈)
意甲冠军 由于矩阵乘法计算链表达的数量,需要的计算 后的电流等于行的矩阵的矩阵的列数 他们乘足够的人才 非法输出error 输入是严格合法的 即使仅仅有两个相乘也会用括号括起来 并且括号中 ...
- UVa442 Matrix Chain Multiplication
// UVa442 Matrix Chain Multiplication // 题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数.假定A和m*n的,B是n*p的,那么AB是m*p的,乘法 ...
- ACM学习历程——UVA442 Matrix Chain Multiplication(栈)
Description Matrix Chain Multiplication Matrix Chain Multiplication Suppose you have to evaluate ...
- UVA——442 Matrix Chain Multiplication
442 Matrix Chain MultiplicationSuppose you have to evaluate an expression like A*B*C*D*E where A,B,C ...
- Matrix Chain Multiplication[HDU1082]
Matrix Chain Multiplication Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- UVA 442 二十 Matrix Chain Multiplication
Matrix Chain Multiplication Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %l ...
- 例题6-3 Matrix Chain Multiplication ,Uva 442
这个题思路没有任何问题,但还是做了近三个小时,其中2个多小时调试 得到的经验有以下几点: 一定学会调试,掌握输出中间量的技巧,加强gdb调试的学习 有时候代码不对,得到的结果却是对的(之后总结以下常见 ...
- Matrix Chain Multiplication(表达式求值用栈操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...
- Matrix Chain Multiplication (堆栈)
题目链接:https://vjudge.net/problem/UVA-442 题目大意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数.如果乘法无法进行,输出error. 假定A是m*n的矩 ...
随机推荐
- 【JDBC核心】实现 CRUD 操作
实现 CRUD 操作 操作和访问数据库 数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果.其实一个数据库连接就是一个 Socket 连接. java.sql 包中有 ...
- cookie和session会话技术
因为http协议是无状态的,也就是说每个客户端访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端状态.会话技术是帮助服务器记住客户端状态的. 一次会话的开始是通过浏览器访问某个 ...
- redis存json数据时选择string还是hash
redis存json数据时选择string还是hash 我们在缓存json数据到redis时经常会面临是选择string类型还是选择hash类型去存储.接下来我从占用空间和IO两方面来分析这两种类型的 ...
- python_字典(dict)
dict 一.结构: info = { "key":"value", "key":"value" } print(inf ...
- Linux学习笔记 | 配置nginx
目录 一.Nginx概述 二.why Nginx? 三.Linux安装Nginx APT源安装 官网源码安装 四.nginx相关文件的配置 html文件:/var/www/html/index.htm ...
- torch.nn 的本质
torch.nn 的本质 PyTorch 提供了各种优雅设计的 modules 和类 torch.nn,torch.optim,Dataset 和 DataLoader 来帮助你创建并训练神经网络.为 ...
- ES6 自定义一个实现了Iterator接口的对象
参考资料 var obj = { data: [1,2,3,4,5], // 这里实际上就是去定义如何实现Iterator接口 [Symbol.iterator](){ const that = th ...
- .NET 云原生架构师训练营(模块二 基础巩固 Scrum 核心)--学习笔记
2.7.2 Scrum 核心 3个工件 5个会议 5个价值观 3个工件 产品待办列表(Product Backlog) Sprint 待办列表(Sprint Backlog) 产品增量(Product ...
- 简要MR与Spark在Shuffle区别
一.区别 ①本质上相同,都是把Map端数据分类处理后交由Reduce的过程. ②数据流有所区别,MR按map, spill, merge, shuffle, sort, r educe等各阶段逐一实现 ...
- cut和tr命令的联合使用
cut的-d选项只能是单个字符,而对于多个连续相同字符分隔的字段,单凭cut命令是达不到想要的效果的,特别是多个连续空格分隔时. 但借助tr -s的压缩重复字符功能,可以将多个连续空格压缩为一个空格, ...