您的位置:首页 > 其它

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

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

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

代码如下:

#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]
);
}
nkoj1463

类似的    nkoj  2305 切蛋糕
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: