蓝桥杯 算法提高 矩阵乘法 (区间dp)
来源:互联网 发布:freecodecamp python 编辑:程序博客网 时间:2024/05/30 05:06
算法提高 矩阵乘法
时间限制:3.0s 内存限制:256.0MB
问题描述
有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。
两个大小分别为p*q和q*r的矩阵相乘时的运算次数计为p*q*r。
两个大小分别为p*q和q*r的矩阵相乘时的运算次数计为p*q*r。
输入格式
输入的第一行包含一个整数n,表示矩阵的个数。
第二行包含n+1个数,表示给定的矩阵。
第二行包含n+1个数,表示给定的矩阵。
输出格式
输出一个整数,表示最少的运算次数。
样例输入
3
1 10 5 20
1 10 5 20
样例输出
150
数据规模和约定
1<=n<=1000, 1<=ai<=10000。
分析:区间dp,状态方程 :dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*a[j+1]); //dp[i][j]表示从第i个矩阵到第j个矩阵的最少运算。
AC代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;//const LL INF=(LL)1<<62;#define INF (LL)1<<62 //注意数据比较大,要用long long 型 const int maxn=1000+10;LL a[maxn];LL dp[maxn][maxn];int main(){int n;while(scanf("%d",&n)==1){for(int i=1;i<=n+1;i++)scanf("%lld",&a[i]);for(int i=1;i<=n;i++)dp[i][i]=0;for(int len=2;len<=n;len++){for(int i=1;i<=n-len+1;i++){int j=len+i-1;dp[i][j]=INF;for(int k=i;k<j;k++){dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*a[j+1]);}}}printf("%lld\n",dp[1][n]);}return 0;}
1 0
- 蓝桥杯 算法提高 矩阵乘法 区间dp
- 算法提高 矩阵乘法 (区间dp)
- 蓝桥杯 算法提高 矩阵乘法 (区间dp)
- 算法提高 矩阵乘法 区间DP
- 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】
- 【区间DP】矩阵乘法
- 算法提高 矩阵乘法 蓝桥杯
- 蓝桥杯算法提高 矩阵乘法
- 算法提高 矩阵乘法
- 算法提高 矩阵乘法
- 算法提高 矩阵乘法
- 算法提高 矩阵乘法
- poj 1651 Multiplication Puzzle(区间dp 矩阵链乘法)
- 《编译原理》 矩阵链乘法(区间dp)
- 【JZOJ5335】【NOIP2017提高组模拟】早苗(DP、矩阵乘法)
- 矩阵乘法——区间DP
- 区间DP——矩阵乘法
- 【蓝桥】算法提高 矩阵乘法
- 内存溢出与内存泄漏
- 2
- shell 笔记2
- ModelSim对.txt文件的读写——十进制格式
- (五)容器-集合
- 蓝桥杯 算法提高 矩阵乘法 (区间dp)
- ACM递推递归练习J 数学黑洞
- SSM(spring + springMVC + mybatis)配置
- java设计模式之模板方法模式
- maven
- 让Fetch()也可以Timeout
- HDOJ 3460 Ancient Printer
- randomAccessFile
- 师--链表的结点插入