/*
题意:矩阵相乘的最少的步数
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的更多相关文章

  1. 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence

    题目传送门 /* 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 矩阵连乘积问题,DP解决:状态转移方程: dp[i][j] = min (dp[i][k] + dp[k+1][j] + p[ ...

  2. ZOJ 1276 Optimal Array Multiplication Sequence(矩阵连乘)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1276 裸的矩阵连乘问题. #include<iostream> ...

  3. ZOJ 1276 "Optimal Array Multiplication Sequence"(最优矩阵链乘问题+区间DP)

    传送门 •题意 矩阵 A(n×m) 和矩阵 B(m×k) 相乘,共做 n×m×k 次乘法运算: 给你 n 个矩阵,求这 n 个矩阵的最优结合方式,使得做的总乘法运算次数最少: •题解 定义dp(i,j ...

  4. UVA - 348Optimal Array Multiplication Sequence(递推)

    id=19208">题目:Optimal Array Multiplication Sequence 题目大意:给出N个矩阵相乘.求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘 ...

  5. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

  6. 算法入门经典大赛 Dynamic Programming

    111 - History Grading LCS 103 - Stacking Boxes 最多能叠多少个box DAG最长路 10405 - Longest Common Subsequence ...

  7. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  8. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  9. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

随机推荐

  1. Linux 常用工具小结:(5) lftp工具使用

    Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...

  2. 客户端JS性能的一些优化的小技巧

    下面是一些关于客户端JS性能的一些优化的小技巧:1.[顶]关于JS的循环,循环是一种常用的流程控制.JS提供了三种循环:for(;;). while().for(in).在这三种循环中 for(in) ...

  3. MSVCRTD.lib(mfc.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC (转)

    一.问题描述 我所使用的编程环境:VS2010 出现的问题如下: MSVCRTD.lib(mfc.obj) : error LNK2019: 无法解析的外部符号_WinMain@16,该符号在函数 _ ...

  4. jackson报错 无法解析,但是json一切正常

    因为类里面缺少无参构造(被有参构造盖掉了)

  5. 口水话 闭包中this的指向

    前言:高程这本书真是神奇,每复习一遍,都会有新的收获.话说我看书有个习惯,要是看得似懂非懂的地方就喜欢打个“?”.这次看到高程第七章“函数表达式”关于闭包与this对象的部分,发现已经积攒了2个问号了 ...

  6. js php json

    js端生成json函数 function json_encode_js(aaa){ function je(str){ var a=[],i=0; var pcs="abcdefghijkl ...

  7. python-getattr

    getattr(object, name[, default]) Return the value of the named attribute of object.  name must be a ...

  8. iOS 删除已经配置的类库和移除CocoaPods

    引言 我们使用CocoaPods非常高效地将一些第三方类库导入到我们的项目中,但是不由得产生一个疑问:如果发现某个类库不适用,甚至是整个CocoaPods我们都不想再在项目中持有,那么我们要怎么把这些 ...

  9. crtmpserver系列(一):流媒体概述

    概述 所谓流媒体按照字面意思理解就是像流一样的媒体,看起来像是废话.流媒体现在司空见惯,所以一般人大概不会有疑问.事实上在流媒体还没有出现的时候,基本上通过网络播放电影就不太现实.通过网络播放电影的时 ...

  10. Java设计模式1:设计模式概论

    设计模式是什么 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易地被他人理解.保证代码可靠性.毫无 ...