【动态规划】矩阵连乘问题

 

 

 

 

代码实现:

#include<stdio.h>
#include<string.h>
int m[10][10],p[10],s[10][10];
int n;
void find_s()
{
	int r,j,i,t,k;
	for(r=2;r<=n;r++)
	{
		for(i=1;i<=n-r+1;i++)
		{
			j=i+r-1;
			m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
			s[i][j]=i;
			for(k=i+1;k<j;k++)
			{
				t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
				if(m[i][j]>t)
				{
					m[i][j]=t;
					s[i][j]=k;
				}
			}
		}
	}
}
void print_(int i,int j)
{
	if(i==j)
		printf("A%d",i);
	else if(i+1==j)
		printf("(A%dA%d)",i,j);
	else
	{
		printf("(");
		print_(i,s[i][j]);
		print_(s[i][j]+1,j);
		printf(")");
	}
}
int main()
{
	
	
	p[0]=30;p[1]=35;p[2]=15;
	p[3]=5;p[4]=10;p[5]=20;
	p[6]=25;
	n=6;
	memset(s,0,sizeof(s));
	memset(m,0,sizeof(m));
	find_s();
	print_(1,n);
	printf("\n");
	return 0;
}

 

全部评论

相关推荐

04-15 23:42
中山大学 Java
ResourceUtilization:过几天楼主就会捧着一堆offer来问牛友们该怎么选辣
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务