您的位置:首页 > 其它

凸多边形三角划分

2017-04-18 22:21 169 查看
给定一个具有N(N<50)个顶点(从1到N编号)的凸多边形,每个顶点的权均已知。问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小?

输入文件:第一行 顶点数N

第二行 N个顶点(从1到N)的权值

输出格式:最小的和的值

各三角形组成的方式

输入示例:5

122 123 245 231

输出示例:The minimum is :12214884

/*
区间DP
f[i][j]表示区间i-j的最小成绩之和,然后枚举断点k,使i,j,k形成一个三角形。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 60
#define lon long long
using namespace std;
int a
,n;
lon f

;
int main(){
memset(f,127/3,sizeof(f));
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) f[i][i+1]=0;
for(int i=n-2;i>=1;i--)
for(int j=i+2;j<=n;j++)
for(int k=i+1;k<j;k++)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]+a[i]*a[j]*a[k]);
cout<<f[1]
;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: