Multiplication Puzzle POJ

#include<iostream>
#include<cstring>
using namespace std;
const int N=110;
int dp[N][N];
int w[N];
int n;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>w[i];
	memset(dp,0,sizeof dp);
	for(int i=1;i<n-1;i++)
		dp[i][i+2]=w[i]*w[i+1]*w[i+2];
	for(int len=3;len<n;len++)
		for(int i=1;i<=n&&i+len<=n;i++)
		{
			int j=len+i;
			for(int k=i+1;k<j;k++)
			{
				if(dp[i][j]==0)
					dp[i][j]=dp[i][k]+dp[k][j]+w[i]*w[k]*w[j];
				dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+w[i]*w[k]*w[j]);
			}
		}
	cout<<dp[1][n]<<endl;
}
原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12469313.html