BUCT OJ 矩阵最优连乘问题
来源:互联网 发布:北京东路的日子 知乎 编辑:程序博客网 时间:2024/05/20 00:51
题目描述
已知一组连乘矩阵的各维长度,要求计算并输出计算量最小的计算顺序表达式。
输入
每行为一组连乘矩阵的各维长度,行中第一个数字是连乘矩阵的个数n,n≤100,后面是n+1个维长。 矩阵个数为0表示输入结束。
输出
对每行输入,计算最优计算顺序,并以括号形式将计算表达式输出,各矩阵用A0, A1, ..的形式表示。
样例输入
1 10 202 10 20 303 10 20 30 406 30 35 15 5 10 20 250
样例输出
A0A0A1(A0A1)A2(A0(A1A2))((A3A4)A5)
提示
输出格式中,不要有多余的括号。
#include<iostream>#include<algorithm>#include<cstdio>#include<vector>#include<cstdlib>#include<cstring>using namespace std;int dp[205][205];int s[205][205];int a[205];int n;void print(int i,int j,int t){ if(i==j){ cout<<"A"<<i-1; } else{ if(t!=0) cout<<"("; print(i,s[i][j],t+1); print(s[i][j]+1,j,t+1); if(t!=0) cout<<")"; }}int main(){ int n; while(~scanf("%d",&n)&&n!=0){ int i,j,k; int length; //memset(s,0,zizeof(s)); n++; for(i=0;i<n;i++){ scanf("%d",&a[i]); dp[i][i]=0; } int t; for(length=2;length<=n;length++){ for(i=1;i<=n-length+1;i++){ j=i+length-1; dp[i][j]=0x7fffffff; for(k=i;k<=j-1;k++){ t=dp[i][k]+dp[k+1][j]+a[i-1]*a[k]*a[j]; if(t<dp[i][j]){ dp[i][j]=t; //printf("%d\n",dp[i][j]); s[i][j]=k; } } } } //printf("%d\n",dp[1][n-1]); print(1,n-1,0); cout<<endl; } return 0;}
0 0
- BUCT OJ 矩阵最优连乘问题
- 矩阵最优连乘问题
- 最优矩阵连乘问题
- 最优矩阵连乘
- 最优矩阵连乘
- 矩阵连乘最优值
- 矩阵连乘最优解
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- 网络爬虫1
- nginx upstream模块
- Chrome安装.crx文件
- 去除迅雷影音游戏弹窗
- SQL 查询中遇到的问题,以及解决办法
- BUCT OJ 矩阵最优连乘问题
- float类型小结(double同理)
- 授之以鱼不如授之以渔
- Facebook Surround360 学习笔记--(1)系统简介
- 路径与路径和
- TYVJ 1028 Bessie的体重问题
- MFC隐藏窗口及图标
- Jeff Atwood倾情推荐——程序员必读之书
- 获取View宽高的几种方式及View和ViewGroup测量的简单实现