Advertisement

POJ 1651

阅读量:

题目:http://poj.org/problem?id=1651

由n个数组成的序列进行相乘,在每次操作中从这些数字中取出一个并将其与旁边的两个数字相乘;继续这个过程直至只剩下两个数字;特别地需要注意的是,在操作过程中首尾两个数字始终保持着不可被移除的状态

遇到这个问题时感到困惑。记得动态规划是一种有效的解决办法。但是不清楚如何构造方程。虽然与矩阵链问题有相似之处但并不完全相同。后来我又查阅了一些相关资料。这才发现这道题本质上与矩阵链问题如出一辙。序列<p0,p1,p2..pn>就是相当于N个矩阵相乘求乘法次数最少的问题直接按算法导论上介绍的方法来解决就可以了

AC代码:

复制代码
 #include<stdio.h>

    
 #define MAX 110
    
 int lenth;
    
 int m[MAX][MAX];
    
 int c[MAX];
    
 void multiplication(void){
    
 	int i,l,k,j,temp;
    
 	for(i=1;i<lenth;i++)
    
 		m[i][i]=0;
    
 	for(l=2;l<lenth;l++){                        //从长度为2开始填写起,
    
 		for(i=1;i<lenth-l+1;

全部评论 (0)

还没有任何评论哟~