1 动态规划转移方程
设 F[I,J](I<J)表示从顶点 I 到顶点 J 的凸多边形三角剖分后所得到的最大乘积
F[I,J]=Min{F[I,K]+F[K,J]+S[I]*S[J]*S[K]} (I<K<J)
目标状态为:F[1,N]
2 代码
#include <stdio.h>
#define N 52
#define MAX 999999999
int c[N][N];
int s[N];
int main()
{
int i,j,k;
int n;
scanf("%d",&n);
for( i=1;i<=n;i++)
scanf("%d",&s[i]);
for (i = 1; i <= n; ++i)
{
c[i][i+1] = 0;
for (j = i + 2; j <=n; ++j)
{
c[i][j] = MAX;
}
}
for (i = n - 2; i >= 1; --i)
{
for (j = i + 2; j <=n; ++j)
{
for (k = i + 1; k < j; ++k)
{
if (c[i][j] > c[i][k] + c[k][j] + s[i]*s[j]*s[k])
{
c[i][j] = c[i][k] + c[k][j] + s[i]*s[j]*s[k];
}
}
}
}
printf("%d\n",c[1][n]);
return 0;
}