例题9-7 最优矩阵链乘

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
using namespace std;
int d[105][105],s[105];
int r()
{
	char ch;
	do
	{
		ch=getchar();
	}while(ch!='-'&&(ch<'0'||ch>'9'));
	int ans=0,f=0;
	if(ch=='-') f=1; else ans=ch-'0';
	while(isdigit(ch=getchar())) ans=ans*10+ch-'0';
	if(f) ans*=-1;
	return ans;
}
int dp(int z,int y)
{
	if(d[z][y]!=0xffffff) return d[z][y];
	for(int k=z;k<=y;k++)
	  if(dp(z,k)+dp(k+1,y)+s[z]*s[k+1]*s[y+1]<d[z][y])
	    d[z][y]=d[z][k]+d[k+1][y]+s[z]*s[k+1]*s[y+1];
    return d[z][y];
}
int main()
{
	int n;
	n=r();
	for(int i=1;i<=n;i++)
	  s[i]=r();
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        d[i][j]=0xffffff;
	for(int i=1;i<=n;i++)          //注意边界 
      d[i][i]=0;
    printf("%d",dp(1,n-1));
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值