实获信息系统 公众号二维码
Problem5812--凸多边形

5812: 凸多边形

Time Limit: 1.000 Sec  Memory Limit: 128 MB
Submit: 39  Solved: 24
[Submit] [Status] [Web Board] [Creator:]

Description

题目描述
给定一个具有 N (N<=50)个顶点的凸多边形,将顶点从 1 至 N 标号,每个顶点的权值都是一个正整数。将这个凸多边形划分成 N-2 个互不相交的三角形,试求这些三角形顶点的权值乘积和至少为多少。

输入格式
输入第一行为顶点数 N

第二行依次为顶点 1 至顶点 N 的权值。

输出格式
输出仅一行,为这些三角形顶点的权值乘积和的最小值。


Sample Input

5
121 122 123 245 231

Sample Output

12214884

HINT

#include<bits/stdc++.h>
using namespace std;
int dp[1005][1005],a[1000005],n;
int main(){
cin>>n;
memset(dp,0x3f3f3f,sizeof(dp));
dp[n][1]=0;
for(int i=1;i<=n;i++){
cin>>a[i];
dp[i][i+1]=0;
}
for(int len=3;len<=n;len++){
for(int i=1;i<=n-len+1;i++){
int j=i+len-1;
for(int k=i+1;k<j;k++){
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[i]*a[j]*a[k]);
}
}
}
cout<<dp[1][n];
return 0;
}

Source/Category

 

[Submit] [Status]