【DP】poj1651 <矩阵链乘法>
2016-08-28 22:00
399 查看
Description
The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of points equal to the product
of the number on the card taken and the numbers on the cards on the left and on the right of it. It is not allowed to take out the first and the last card in the row. After the final move, only two cards are left in the row.
The goal is to take cards in such order as to minimize the total number of scored points.
For example, if cards in the row contain numbers 10 1 50 20 5, player might take a card with 1, then 20 and 50, scoring
10*1*50 + 50*20*5 + 10*50*5 = 500+5000+2500 = 8000
If he would take the cards in the opposite order, i.e. 50, then 20, then 1, the score would be
1*50*20 + 1*20*5 + 10*1*5 = 1000+100+50 = 1150.
Input
The first line of the input contains the number of cards N (3 <= N <= 100). The second line contains N integers in the range from 1 to 100, separated by spaces.
Output
Output must contain a single integer - the minimal score.
Sample Input
Sample Output
题意:就是n个数,每次从除去首尾两个数的其他数中选一个数和挨着的两边的数相乘得到一个值,然后每次求的值相加,按照这种方法求解一个最小的值。
思路:肯定会想到暴力,但是时间复杂度是指数级的,肯定会tle。看了看书,发现这是一个很裸的矩阵链乘法的题目,收藏一下此题,在仔细看一下这个算法。
【参考代码】
The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of points equal to the product
of the number on the card taken and the numbers on the cards on the left and on the right of it. It is not allowed to take out the first and the last card in the row. After the final move, only two cards are left in the row.
The goal is to take cards in such order as to minimize the total number of scored points.
For example, if cards in the row contain numbers 10 1 50 20 5, player might take a card with 1, then 20 and 50, scoring
10*1*50 + 50*20*5 + 10*50*5 = 500+5000+2500 = 8000
If he would take the cards in the opposite order, i.e. 50, then 20, then 1, the score would be
1*50*20 + 1*20*5 + 10*1*5 = 1000+100+50 = 1150.
Input
The first line of the input contains the number of cards N (3 <= N <= 100). The second line contains N integers in the range from 1 to 100, separated by spaces.
Output
Output must contain a single integer - the minimal score.
Sample Input
6 10 1 50 50 20 5
Sample Output
3650
题意:就是n个数,每次从除去首尾两个数的其他数中选一个数和挨着的两边的数相乘得到一个值,然后每次求的值相加,按照这种方法求解一个最小的值。
思路:肯定会想到暴力,但是时间复杂度是指数级的,肯定会tle。看了看书,发现这是一个很裸的矩阵链乘法的题目,收藏一下此题,在仔细看一下这个算法。
【参考代码】
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define INF 0x3f3f3f3f int n,a[105],dp[105][105],j,k; int main() { while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); for(int l=2;l<n;l++) { for(int i=2;i<=n-l+1;i++) { j=i+l-1; dp[i][j]=INF; for(k=i;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+a[i-1]*a[k]*a[j]); } } printf("%d\n",dp[2] ); } return 0; }
相关文章推荐
- (noip 模拟 Matrix)<逃避矩阵乘法的好方法#滑稽>
- 1009: [HNOI2008]GT考试 矩阵乘法优化DP+KMP
- HDU 2243 AC自动机->DP->附矩阵乘法板子
- 利用CUDA的矩阵乘法1 <利用 Kahan's Summation Formula 来提高CUDA 的浮点数运算精确度>
- BZOJ 1009 [HNOI2008]GT考试 矩阵乘法+DP
- [bzoj1009][kmp][DP][矩阵乘法]GT考试
- 数据结构之(动态规划二)之<矩阵链乘法>
- [BZOJ 1009] [HNOI2008] GT考试 【AC自动机 + 矩阵乘法优化DP】
- OpenCL案例研究之一<矩阵乘法>
- 51nod oj 1137 1242 <结构体内重载运算符求矩阵乘法>
- BZOJ1009 GT考试 (DP 矩阵乘法优化)
- <Python> Numpy中的矩阵乘法问题
- dp 最优矩阵乘法
- (cogs 613 火车站饭店)<树形DP>
- WEBGL 2D游戏引擎研发系列 第四章 <感想以及矩阵>
- Numpy中的数组<矩阵>
- 01背包问题——<DP>
- [bzoj1875][DP][矩阵乘法]HH去散步
- 51nod 1583 犯罪计划——矩阵乘法优化dp
- BZOJ 2004: [Hnoi2010]Bus 公交线路 [DP 状压 矩阵乘法]