区间动规——凸多边形的三角划分

             给定一具有N个顶点(按顺时针方向1到N编号)的凸多边形,每个顶点的权均已知。问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小?

            f[i][j]表示从编号i到j(顺时针)这一段连续顶点划分后的最小权重;那么求解的问题变成了f[1][n]

代码如下:

 #include<iostream>
#include<cstdio>
long long w[55],f[55][55];
int main(){
long long n,i,x,k,j;
scanf("%I64d",&n);
for(i=1;i<=n;i++)scanf("%I64d",&w[i]);
for(x=2;x<n;x++)    //连续顶点数
  for(i=1;i<=n-x;i++){    //从第i个顶点开始  
  j=i+x;
  f[i][j]=999999999999999999LL;//初值要足够大
  for(k=i+1;k<j;k++)
  f[i][j]=min(f[i][j],f[i][k]+f[k][j]+w[i]*w[k]*w[j]);  
  }
printf("%I64d",f[1][n]);   
}

nkoj1463

类似的    nkoj  2305 切蛋糕


你可能感兴趣的:(区间动规——凸多边形的三角划分)