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个矩阵相乘的最少步数
sign[i][j]表示的是第i个矩阵到第j个矩阵相乘的最少步数是由第i个矩阵到第sign[i][j]个矩阵相乘最少步数
和第sign[i][j]+1个矩阵到第j个矩阵相乘最少步数的得到的最小值!
*/
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[][];
int sign[][];
int num[];
int ld[], rd[];
int n; void dfs(int l, int r){//将[l,r]不断分解成最优的子区间
if(sign[l][r]==) return ;
ld[l]++;//l数字出现了多少次,就意味着出现了多少次区间作值为l,也就是出现了多少次左括号
rd[r]++;//同理r右侧出现了多少次右括弧
dfs(l, sign[l][r]);
dfs(sign[l][r]+, r);
} void traceBack(){ memset(ld, , sizeof(ld));
memset(rd, , sizeof(rd));
dfs(, n);
for(int i=; i<=n; ++i){
while(ld[i]--) cout<<"(";
cout<<"A"<<i;
while(rd[i]--) cout<<")";
if(i!=n)
cout<<" x ";
}
cout<<endl;
} void traceBackTmp(int l, int r){//这是用递归的形式写的,将区间不断缩小,打印(Ai x Aj)
if(l>r) return;
if(l==r) printf("A%d", l);
else{
printf("(");
traceBackTmp(l, sign[l][r]);
printf(" x ");
traceBackTmp(sign[l][r]+, r);
printf(")");
}
} int main(){
int cnt, count=;
string s="";
s+=;
cout<<s<<endl;
while(scanf("%d", &n) && n){
int u, v;
cnt=;
scanf("%d%d", &num[cnt], &num[cnt+]);
cnt+=;
for(int i=; i<=n; ++i){
scanf("%d%d", &u, &v);
num[cnt++]=v;
}
n=cnt-;
memset(dp, 0x3f, sizeof(dp));
memset(sign, , sizeof(sign));
for(int i=; i<=n; ++i)
dp[i][i]=;
for(int x=; x<=n; ++x)
for(int i=; i+x-<=n; ++i){
int j=i+x-;
for(int k=i; k<j; ++k){
int tt=dp[i][k]+dp[k+][j]+num[i-]*num[k]*num[j];
if(dp[i][j]>tt){
dp[i][j]=tt;
sign[i][j]=k;
}
}
} cout<<"Case "<<++count<<": ";
traceBack(); // cout<<"Case "<<++count<<": ";
// traceBackTmp(1, n);
// cout<<endl;
}
return ;
}
UVAoj 348 - Optimal Array Multiplication Sequence的更多相关文章
- 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
题目传送门 /* 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 矩阵连乘积问题,DP解决:状态转移方程: dp[i][j] = min (dp[i][k] + dp[k+1][j] + p[ ...
- 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 ...
- UVA - 348Optimal Array Multiplication Sequence(递推)
id=19208">题目:Optimal Array Multiplication Sequence 题目大意:给出N个矩阵相乘.求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘 ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- 算法入门经典大赛 Dynamic Programming
111 - History Grading LCS 103 - Stacking Boxes 最多能叠多少个box DAG最长路 10405 - Longest Common Subsequence ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 一位学长的ACM总结(感触颇深)
发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
随机推荐
- LR loadrunner参数化-笔记
LR在录制程序运行的过程中,VuGen(脚本生成器) 自动生成了包含录制过程中实际用到的数值的脚本,如果你企图在录制的脚本中使用不同的数值执行脚本的活动(如查询.提交等等),那么你必须用参数值取代 ...
- Restore Oracle database to another server
1. Copy or remotely mount the backupset folder from the source server to the target server 2. On the ...
- java和android及IOS对接RSA加密经验
1.网上找的java生成RSA密钥对的例子,产生的字附串实际上是hax后和密钥串 你可以将他们当成静态字附串存在java代码里 2.android和java可以代码复用,IOS对接比较麻烦 3.IOS ...
- FreeRTOS和Ucos在打开关闭中断的区别
- SubversionEdge 变更绑定地址
接上一篇,由于VS的项目和SubversionEdge是通过固定的IP地址绑定在一起的,所以这就有个问题:如果由于种种原因,IP地址换了,那么绑定就失效了. 此时,VS项目的各种变更无法提交到Subv ...
- 蛙蛙推荐:WEB安全入门
信息安全基础 信息安全目标 真实性:对信息的来源进行判断,能对伪造来源的信息予以鉴别, 就是身份认证. 保密性:保证机密信息不被窃听,盗取,或窃听者不能了解信息的真实含义. 完整性:保证数据的一致性, ...
- Jumony快速抓取网页 --- Jumony使用笔记--icode
作者:郝喜路 个人主页:http://www.cnicode.com 博客地址:http://haoxilu.cnblogs.com 时间:2014年6月26日 19:25:02 ...
- 软件测试基本理论-IBM模式
软件测试基本理论(1) IBM生产模式 1 参考书目 <IBM-从菜鸟到测试架构师-一个测试工程师的成长日记> 出版社:电子工业出版社 印次:2013年6月 作者:IBM主要工程师 2 ...
- 在.net中使用aquiles访问Cassandra(一)
aquiles是.net下基于Thrift协议访问Cassandra的第三方类库,官方地址是: http://aquiles.codeplex.com/ 1.下载类库文件: http://aqui ...
- [ACM_模拟] POJ1068 Parencodings (两种括号编码转化 规律 模拟)
Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two diff ...